<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Zugriff auf denn NExt&#x2F;prev ptr der std::liste]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibts ne möglichkeit auf den Next bzw. PRev Zeiger eines Listenelemts der std:list zuzugriefen?</p>
<p>Und wieso ist der std:list&lt;&gt;::iterator so langsam??</p>
<p>Wenn ich jedem Objekt meiner Liste einen Zeiger auf das nächste/davorliegen Objekt setze, und dann mit den Zeiger iterier... ist die iteration um den faktor 3000 schneller! Aber wieso so ein krasser performance unterschied?</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

struct TEST{

    double m_dDuration;
    TEST* Prev;
	TEST* Next;

    double Time(){
        if(Prev==NULL)
            return 0;
        else
            return Prev-&gt;Time()+m_dDuration;
    }
};    

int _tmain(int argc, _TCHAR* argv[]){

	std::list&lt;TEST&gt; LISTE;

    for(int i=0; i&lt;1000; i++){

        TEST o;
         if(LISTE.empty()){
            o.m_dDuration=0;
            o.Prev=NULL;
			o.Next=NULL;
			LISTE.push_back(o);
        }
        else{
            o.m_dDuration=10;
			LISTE.push_back(o);
			(--(--LISTE.end()))-&gt;Next= &amp;LISTE.back();//(--LISTE.end());
			(--LISTE.end())-&gt;Prev= &amp;((--(--LISTE.end()))._Ptr-&gt;_Myval);
        }

    }

	//ITERATOR
	long lDiff= timeGetTime();
	for(int l=0; l&lt; 1000; l++){
		double Sum=0;
		for(std::list&lt;TEST&gt;::iterator it= LISTE.begin(); it!= LISTE.end() ; it++)
			Sum+=it-&gt;m_dDuration;

	}
	lDiff= timeGetTime()- lDiff;

	//ZEIGER
	lDiff= timeGetTime();
	for(int l=0; l&lt; 1000; l++){
		double Sum=0;
		for(TEST* p= &amp;LISTE.front(); p!= NULL  ; p= p-&gt;Next)
			Sum+=p-&gt;m_dDuration;
	}
	lDiff= timeGetTime()- lDiff;
	return 0;
}
</code></pre>
<p>Hab ich einen Denkfehler drin, oder ist der unterschied wierklich so krass?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195039/zugriff-auf-denn-next-prev-ptr-der-std-liste</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 21:13:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195039.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Oct 2007 08:46:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 09:04:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibts ne möglichkeit auf den Next bzw. PRev Zeiger eines Listenelemts der std:list zuzugriefen?</p>
<p>Und wieso ist der std:list&lt;&gt;::iterator so langsam??</p>
<p>Wenn ich jedem Objekt meiner Liste einen Zeiger auf das nächste/davorliegen Objekt setze, und dann mit den Zeiger iterier... ist die iteration um den faktor 3000 schneller! Aber wieso so ein krasser performance unterschied?</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

struct TEST{

    double m_dDuration;
    TEST* Prev;
	TEST* Next;

    double Time(){
        if(Prev==NULL)
            return 0;
        else
            return Prev-&gt;Time()+m_dDuration;
    }
};    

int _tmain(int argc, _TCHAR* argv[]){

	std::list&lt;TEST&gt; LISTE;

    for(int i=0; i&lt;1000; i++){

        TEST o;
         if(LISTE.empty()){
            o.m_dDuration=0;
            o.Prev=NULL;
			o.Next=NULL;
			LISTE.push_back(o);
        }
        else{
            o.m_dDuration=10;
			LISTE.push_back(o);
			(--(--LISTE.end()))-&gt;Next= &amp;LISTE.back();//(--LISTE.end());
			(--LISTE.end())-&gt;Prev= &amp;((--(--LISTE.end()))._Ptr-&gt;_Myval);
        }

    }

	//ITERATOR
	long lDiff= timeGetTime();
	for(int l=0; l&lt; 1000; l++){
		double Sum=0;
		for(std::list&lt;TEST&gt;::iterator it= LISTE.begin(); it!= LISTE.end() ; it++)
			Sum+=it-&gt;m_dDuration;

	}
	lDiff= timeGetTime()- lDiff;

	//ZEIGER
	lDiff= timeGetTime();
	for(int l=0; l&lt; 1000; l++){
		double Sum=0;
		for(TEST* p= &amp;LISTE.front(); p!= NULL  ; p= p-&gt;Next)
			Sum+=p-&gt;m_dDuration;
	}
	lDiff= timeGetTime()- lDiff;
	return 0;
}
</code></pre>
<p>Hab ich einen Denkfehler drin, oder ist der unterschied wierklich so krass?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384257</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 09:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 09:35:48 GMT]]></title><description><![CDATA[<p>Tjo, was soll man sagen... Wenn du's im Release getestet hast, wirds schon stimmen.. Und Faktor 3000 ist schon ein Wort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384270</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Oct 2007 09:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 09:43:29 GMT]]></title><description><![CDATA[<p>stimmt daran hab ich gar nich gedacht... d.h. der iterator ist in release mode ohne debug gedöns schneller, bzw. VIEL schneller?</p>
<p>Schade kanns in Release nich testen, timeGetTime(); unaufgelöstes Symbol.. wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384272</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 09:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 09:45:05 GMT]]></title><description><![CDATA[<p>Visual C++? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /><br />
Probier mal:</p>
<pre><code class="language-cpp">#ifdef _MSC_VER
#	define _SECURE_SCL 0 // disables range checks for std:: containers.
#endif
</code></pre>
<p>Vor den #includes.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384273</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 13 Oct 2007 09:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 09:48:11 GMT]]></title><description><![CDATA[<p>hab ich, aber immer noch gleich langsam?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384278</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 09:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 10:11:40 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Schade kanns in Release nich testen, timeGetTime(); unaufgelöstes Symbol.. wieso?</p>
</blockquote>
<p>Im Release musst du evtl nochmal die lib einbinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384287</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Oct 2007 10:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 10:55:02 GMT]]></title><description><![CDATA[<p>Außerdem würde ich bei Iteratoren immer den Postincrement-Operator benutzen (im Release mit Optimierungen könnte das temporäre Objekt des Preincrement-Operators evtl. wegoptimiert werden):</p>
<pre><code class="language-cpp">for(std::list&lt;Test&gt;::iterator it = liste.begin(); it != liste.end(); ++it)
  sum += it-&gt;m_dDuration;
</code></pre>
<p>Und Variablen ganz groß zu schreiben, klingt - wie hier im Forum - auch nach Schreien oder aber nach Makros -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384311</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 13 Oct 2007 10:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 13:02:16 GMT]]></title><description><![CDATA[<p>Ich kanns nicht mit der std::list im Release Modus aufnehmen.<br />
Hier meine auf die Schnelle geschriebene Liste:</p>
<pre><code class="language-cpp">template &lt;class DataType&gt;
class List
{
	struct ListNode
	{
		ListNode(ListNode* nxt, ListNode* prv, DataType* dat)
			: next(nxt), prev(prv), data(dat) 
		{ }

		DataType* data;

		ListNode* next;
		ListNode* prev;
	};
	typedef ListNode Node;

public:
	typedef Node* iterator;

	List() : startNode(0), lastNode(0)
	{ }

	~List()
	{
		clear();
	}

	void clear()
	{
		iterator next;
		for (iterator iter = startNode; iter != 0; iter = next)
		{
			next = iter-&gt;next;
			delete iter-&gt;data;
			delete iter;
		}
		startNode = 0;
		lastNode  = 0;
	}

	void push_back(const DataType&amp; data)
	{
		DataType* pData = new DataType(data);
		if (startNode == 0)
		{
			startNode = new Node(0, 0, pData);
			lastNode  = startNode;
		}
		else
		{
			Node* newNode = new Node(0, lastNode, pData);
			lastNode-&gt;next = newNode;
			lastNode = newNode;
		}
	}

	Node* startNode;
	Node* lastNode;

private:
	List(const List&amp;);
	List&amp; operator =(const List&amp;);
};
</code></pre>
<p>Dazu mein &quot;Benchmark&quot;:</p>
<pre><code class="language-cpp">#ifdef _MSC_VER
#	define _SCL_SECURE 0
#endif

#include &lt;list&gt;
#include &lt;iostream&gt;

#include &lt;windows.h&gt;

#include &quot;DonsList.h&quot;

int main()
{
	List&lt;unsigned int&gt;      primitiveList;
	std::list&lt;unsigned int&gt; standardList;

	DWORD startTime;
	DWORD endTime;

	startTime = GetTickCount();
	for (unsigned int i = 0; i &lt; 5000000; ++i)
		primitiveList.push_back(i);
	endTime = GetTickCount();
	std::cout &lt;&lt; &quot;DonsList: Time to fill: &quot; &lt;&lt; endTime - startTime &lt;&lt; std::endl;

	startTime = GetTickCount();
	for (unsigned int i = 0; i &lt; 5000000; ++i)
		standardList.push_back(i);
	endTime = GetTickCount();
	std::cout &lt;&lt; &quot;std::list: Time to fill: &quot; &lt;&lt; endTime - startTime &lt;&lt; std::endl;

	startTime = GetTickCount();
	for (List&lt;unsigned int&gt;::iterator iter = primitiveList.startNode; 
		iter != primitiveList.lastNode; iter = iter-&gt;next)
		(*(iter-&gt;data)) = 1;
	endTime = GetTickCount();
	std::cout &lt;&lt; &quot;DonsList: Iteration time: &quot; &lt;&lt; endTime - startTime &lt;&lt; std::endl;

	startTime = GetTickCount();
	for (std::list&lt;unsigned int&gt;::iterator iter = standardList.begin();
		iter != standardList.end(); ++iter)
		(*iter) = 1;
	endTime = GetTickCount();
	std::cout &lt;&lt; &quot;std::list: Iteration time: &quot; &lt;&lt; endTime - startTime &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Die std::list ist meiner Variante sowohl bei der Füllzeit als auch bei der Iterationszeit (weit) überlegen:</p>
<pre><code>DonsList:  Time to fill:   3484
std::list: Time to fill:   1797
DonsList:  Iteration time:  110
std::list: Iteration time:   78
</code></pre>
<p>Im Debug Modus siehts dann wieder anders aus:</p>
<pre><code>DonsList:  Time to fill:  16688
std::list: Time to fill:  19609
DonsList:  Iteration time:  297
std::list: Iteration time: 6813
</code></pre>
<p>Allerdings macht std::list bestimmt sinnvolle Überprüfungen bei der Iteration, die in meiner Variante ja nicht enthalten sind.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384353</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 13 Oct 2007 13:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 13:07:22 GMT]]></title><description><![CDATA[<p>sehr gut.. danke für deine hilfe.. dann werd ich doch den std::list verwenden;)</p>
<p>Gibts keine mögichkeit auch im debug mode mit der release geschwindigkeit der liste zu arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384388</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 13:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 17:13:54 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>sehr gut.. danke für deine hilfe.. dann werd ich doch den std::list verwenden;)</p>
<p>Gibts keine mögichkeit auch im debug mode mit der release geschwindigkeit der liste zu arbeiten?</p>
</blockquote>
<p>Du verlierst doch die Vorteile des Debugmodus, wenn du das tun würdest. Es geht sicherlich, indem du irgendein #define umänderst, aber im Prinzip kann man dann auch gleich in den Releasemodus wechseln.<br />
In VC++ kann man imho eigene Buildoptionen erstellen. Dort könntest du ja so eine Art Hybridmodel entwickeln, allerdings sehe ich den Sinn darin bisher nicht.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384531</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 13 Oct 2007 17:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 17:47:58 GMT]]></title><description><![CDATA[<p>du meinst, ich soll das ding im release mode.. testen, und im debugmode coden:) Ist ja nich weiter schlimm hast recht...</p>
<p>Da stellt sich die frage, welche unterschiede es im relese mode zum debug mode gibt? DAs Programm kann ja im debug mode ohne fehler laufen, aber im release können ja unerwartet fehler auftreten.. oder? was macht der compiler das genau..</p>
<p>Hab mal gehört das im debug mode Boolean automatisch auf false intialisert werden vom compiler.. im release mode sind sie undefiniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384542</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 17:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 17:55:23 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Da stellt sich die frage, welche unterschiede es im relese mode zum debug mode gibt? DAs Programm kann ja im debug mode ohne fehler laufen, aber im release können ja unerwartet fehler auftreten.. oder? was macht der compiler das genau..</p>
</blockquote>
<p>Afaik gibt es im Debug-Modus einfach eine Menge mehr Sicherheitsabfragen. Wenn du dir mit new Speicher holst und ein kleines Stückchen darüber hinausschreibst, wird das im Debug gemeldet, im Release bemerkt man es meistens nicht. Von daher sollte man eigentlich nur für das fertige Produkt oder gelegentliche (Performance-)Tests den Releasemodus einschalten.</p>
<p>und das mit dem bool weiß ich nicht, lässt sich aber sicherlich relativ einfach herausfinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384546</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Oct 2007 17:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 18:03:40 GMT]]></title><description><![CDATA[<p>genau, dewegen wäre es inderesant wie don schon sagte, eine hybrid version zu gestalten, wo einige sicherheisabfrage deaktiviert sind und andere nicht.. wie jetzt in dem fall meiner std::list! Wäre also mal interessant zu wissen was ich machen muss das std::list mit release performace arbeitet im debug mode!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384558</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 18:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 18:12:11 GMT]]></title><description><![CDATA[<p>#ifdef _DEBUG<br />
#undef _DEBUG<br />
#include &lt;list&gt;<br />
#define _DEBUG<br />
#endif</p>
<p>oder so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384568</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Oct 2007 18:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 18:17:28 GMT]]></title><description><![CDATA[<p>danke aber da kommt ein fehler.. probierst mal aus...</p>
<p>Wenn debug aktiviert ist , soll er für list debug deaktieren und danach wieder aktiveren ! das passt ihm wohl nich</p>
<p>Naja der compiler meint wenn einige sachen im debug mode sind und andere nicht gibts evtl. probleme.. schadE;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384571</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 13 Oct 2007 18:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 19:58:35 GMT]]></title><description><![CDATA[<p>Im Debugmodus Performance zu testen ist recht sinnfrei. Man würde die performancekritischen Bereiche nicht wirklich erkennen können, wie zB bei diesem Beispiel: Du dachtest die Iteration sei der Flaschenhals und hättest dir eine andere Möglichkeit überlegt die scheinbar schneller ist. Im fertigen Programm(Releasemodus) wäre das aber genau umgekehrt (std::list Iteratoren sind schneller). Man beschäftigt sich also mit den falschen Problemen.</p>
<p>Zum Initialisieren der Variablen: VC++ initialisiert im Debugmodus _alle_ Variablen, sogar den Speicher, den man auf dem Heap alloziert. Aber du solltest eh nie uninitialisierte Variablen verwenden! Wenn man also ordentlich programmiert kommen solche Probleme, wie &quot;es funktioniert im Debugmodus aber nicht im Releasemodus&quot; gar nicht vor.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384629</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 13 Oct 2007 19:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sat, 13 Oct 2007 20:29:46 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13742">@BorisDieKlinge</a>:<br />
Der Debug Modus ist nicht dafür da dass keine Fehler auftreten, der ist dazu da Fehler zu finden und das Programm &quot;zu debuggen&quot;.<br />
Angenommen irgendwas funktioniert nicht wie es sollte. Im Debugmodus kannst du mit dem Debugger Zeile für Zeile durch dein Programm steppen, da jegliche Optimierungen ausgeschaltet sind, und Informationen darüber vorhanden sind welche Stücke Code zu welcher Zeile im Programm gehören. Weiters kann man jederzeit alle Variablen und Member einsehen.</p>
<p>Im Releasemode eliminiert der Compiler dagegen viel an Code wenn er nicht nötig ist, verschiebt Codeteile etc. All das führt dazu dass man das Programm kaum noch vernünftig debuggen kann.</p>
<p>p.S.: die meisten Compiler erzeugen im Debugmodus sogar Code der dafür sorgen soll dass gewisse Fehler auftreten. z.B. werden Variablen die nicht initialisiert wurden mit bestimmten einfach zu erkennenden Mustern gefüllt (statt das zu beinhalten was auch immer vorher an der Speicherstelle stand die jetzt für die Variable verwendet wird). Oder es werden zusätzliche Bereiche vor und hinter einem dynamisch angeforderten Speicherblock mit bestimmten Mustern gefüllt die dann beim Freigeben wieder überprüft werden, damit man draufkommt wenn mehr Speicher geschrieben wurde als man angefordert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384652</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 13 Oct 2007 20:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sun, 14 Oct 2007 12:06:00 GMT]]></title><description><![CDATA[<p>Viel lieferen ihre Software im debug modus aus... weil sie angst haben das die software im release nich so funktioniert wie im Debug mode</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384827</guid><dc:creator><![CDATA[Debug Mode]]></dc:creator><pubDate>Sun, 14 Oct 2007 12:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sun, 14 Oct 2007 12:14:42 GMT]]></title><description><![CDATA[<p>Man sollte beim programmieren auch regelmäßig die Release-Version kompilieren und testen. Wer das vernachlässigt hat es später unnötig schwer Fehler zu finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384836</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sun, 14 Oct 2007 12:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf denn NExt&#x2F;prev ptr der std::liste on Sun, 14 Oct 2007 15:08:32 GMT]]></title><description><![CDATA[<p>Debug Mode schrieb:</p>
<blockquote>
<p>Viel lieferen ihre Software im debug modus aus... weil sie angst haben das die software im release nich so funktioniert wie im Debug mode</p>
</blockquote>
<p>Hätte ich noch nie gehört, ich vermute du schreibst Schwachsinn.</p>
<p>lolz schrieb:</p>
<blockquote>
<p>Man sollte beim programmieren auch regelmäßig die Release-Version kompilieren und testen. Wer das vernachlässigt hat es später unnötig schwer Fehler zu finden.</p>
</blockquote>
<p>Das kommt drauf an wie man programmiert würde ich sagen. Ich hatte in letzter Zeit (2-3 Jahre) kaum mehr Fehler die schwer zu finden waren, und nix dabei was sich nur im Release Mode manifestiert hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384956</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 14 Oct 2007 15:08:32 GMT</pubDate></item></channel></rss>