<?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[Lokale Variablen in Schleifen?]]></title><description><![CDATA[<p>Einen wunderschönen guten Abend<br />
Ich frage mich gerade, ob es wohl einen Unterschied macht, ob ich:</p>
<pre><code class="language-cpp">int a;

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

 for(int k=0;k&lt;1000;++k) a += k;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">for(int i=0;i&lt;10000;++i){
 int a = 0;

 for(int k=0;k&lt;1000;++k) a += k;
}
</code></pre>
<p>Also konkret, ob es einen Performanzunterschied macht, ob ich so eine Variable innerhalb einer Schleife deklariere oder nicht. Ich könnte mir vorstellen, dass der Kompiler das dann doch ausserhalb der Schleife deklariert?</p>
<p>Mfg Samuel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253648/lokale-variablen-in-schleifen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 14:25:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253648.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Nov 2009 22:36:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Wed, 04 Nov 2009 22:36:43 GMT]]></title><description><![CDATA[<p>Einen wunderschönen guten Abend<br />
Ich frage mich gerade, ob es wohl einen Unterschied macht, ob ich:</p>
<pre><code class="language-cpp">int a;

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

 for(int k=0;k&lt;1000;++k) a += k;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">for(int i=0;i&lt;10000;++i){
 int a = 0;

 for(int k=0;k&lt;1000;++k) a += k;
}
</code></pre>
<p>Also konkret, ob es einen Performanzunterschied macht, ob ich so eine Variable innerhalb einer Schleife deklariere oder nicht. Ich könnte mir vorstellen, dass der Kompiler das dann doch ausserhalb der Schleife deklariert?</p>
<p>Mfg Samuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803521</guid><dc:creator><![CDATA[Ishildur]]></dc:creator><pubDate>Wed, 04 Nov 2009 22:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Wed, 04 Nov 2009 22:48:35 GMT]]></title><description><![CDATA[<p>Ich würde sagen, dass der Compiler eh den gleichen Maschinencode generiert. Vielleicht interessiert dich ja wie der stack organisiert ist: <a href="http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Assembler1/lecture.html" rel="nofollow">http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Assembler1/lecture.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803524</guid><dc:creator><![CDATA[jesus was black]]></dc:creator><pubDate>Wed, 04 Nov 2009 22:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Wed, 04 Nov 2009 23:19:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3422">@jesus</a> was black: Dein Link funktioniert nicht</p>
<p>Und ja: Wenn überhaupt, dann ändert sich bloß die Position von a auf dem Stack. Bei der Definition von primitiven Typen wie int passiert ja nichts im Prozessor, das ist einfach nur eine Speicherzelle die benutzt wird. Bei Klassen mit komplexem Konstruktor/Destruktor sieht die Sache natürlich ganz anders aus, aber das sollte wohl klar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803534</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Nov 2009 23:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Wed, 04 Nov 2009 23:20:47 GMT]]></title><description><![CDATA[<p>Naja, ich frage mich, ob er den Stackzeiger erst dann anpasst, wenn ich die variable definiere =&gt; Also sub esp,0h04, oder ob er sämtliche lokalen Variable innerhalb einer Methode oder Funktion nimmt, deren Speicherbedarf zusammenzählt und schliesslich ein einziges mal ein sub macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803537</guid><dc:creator><![CDATA[Ishildur]]></dc:creator><pubDate>Wed, 04 Nov 2009 23:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Wed, 04 Nov 2009 23:49:43 GMT]]></title><description><![CDATA[<p>Oh, jetzt bin ich baff: g++ ohne alle Optimierungen erzeugt tatsächlich anderen Maschinencode. Der relevante Abschnitt:</p>
<p>Variante 1:</p>
<pre><code>call	___main
	movl	$0, -4(%ebp)
	movl	$0, -8(%ebp)
L2:
	cmpl	$9999, -8(%ebp)
	jg	L3
	movl	$0, -12(%ebp)
L5:
	cmpl	$999, -12(%ebp)
	jg	L4
	movl	-12(%ebp), %eax
	leal	-4(%ebp), %edx
	addl	%eax, (%edx)
	leal	-12(%ebp), %eax
	incl	(%eax)
	jmp	L5
L4:
	leal	-8(%ebp), %eax
	incl	(%eax)
	jmp	L2
L3:
	movl	$0, %eax
	leave
	ret
</code></pre>
<p>Und Variante 2:</p>
<pre><code>call	___main
	movl	$0, -4(%ebp)
L2:
	cmpl	$9999, -4(%ebp)
	jg	L3
	movl	$0, -8(%ebp)
	movl	$0, -12(%ebp)
L5:
	cmpl	$999, -12(%ebp)
	jg	L4
	movl	-12(%ebp), %eax
	leal	-8(%ebp), %edx
	addl	%eax, (%edx)
	leal	-12(%ebp), %eax
	incl	(%eax)
	jmp	L5
L4:
	leal	-4(%ebp), %eax
	incl	(%eax)
	jmp	L2
L3:
	movl	$0, %eax
	leave
	ret
</code></pre>
<p>Der Unterschied ist, dass die movl Anweisung aus Zeile 3 der ersten Variante ein paar zeilen nach unten gerückt wird und somit innerhalb der Schleife liegt die sich von Label L2 bis L3 erstreckt. Das heißt, dass diese Anweisung tatsächlich 10.000 Mal ausgeführt wird anstatt 1x. Soviel also zu vorschnellen Verlautbarungen, dass es keinen Unterschied macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803544</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Nov 2009 23:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Thu, 05 Nov 2009 02:58:53 GMT]]></title><description><![CDATA[<p>Ohne alle Optimierungen wundert mich garnicht dass anderer Code rauskommt.<br />
Ohne alle Optimierungen interessiert aber keinen. Also zumindest mich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803556</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Nov 2009 02:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen in Schleifen? on Thu, 05 Nov 2009 03:23:41 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ohne alle Optimierungen interessiert aber keinen. Also zumindest mich nicht.</p>
</blockquote>
<p>Mich auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803561</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 05 Nov 2009 03:23:41 GMT</pubDate></item></channel></rss>