<?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[Variable in Schleife definieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ist es effizienter, wenn ich Variablen ausserhalb einer Schleife definiere?\<br />
Sprich: Ist das hier:</p>
<pre><code class="language-cpp">double a;
double b;
for(int i=0; i &lt; 100; i++) {
   a = foo * ...
   b = array[i] + ...
}
</code></pre>
<p>effizienter als das:</p>
<pre><code class="language-cpp">for(int i=0; i &lt; 100; i++) {
   double a = foo * ...
   double b = array[i] + ...
}
</code></pre>
<p>? Oder is das Wurst?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276776/variable-in-schleife-definieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 06:50:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276776.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Nov 2010 08:44:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 08:44:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ist es effizienter, wenn ich Variablen ausserhalb einer Schleife definiere?\<br />
Sprich: Ist das hier:</p>
<pre><code class="language-cpp">double a;
double b;
for(int i=0; i &lt; 100; i++) {
   a = foo * ...
   b = array[i] + ...
}
</code></pre>
<p>effizienter als das:</p>
<pre><code class="language-cpp">for(int i=0; i &lt; 100; i++) {
   double a = foo * ...
   double b = array[i] + ...
}
</code></pre>
<p>? Oder is das Wurst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977098</guid><dc:creator><![CDATA[wurst0r]]></dc:creator><pubDate>Mon, 08 Nov 2010 08:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 08:49:53 GMT]]></title><description><![CDATA[<p>Das kommt auf den Anwendungsfall an.</p>
<p>EDIT: Bei innerhalb hast du halt immer noch zusätzlich den konstruktor-call und den destruktor-call in jedem Durchlauf. Bei Außerhalb schleppst du nicht benötigten Speicher mit. Wenn du pure geschwindigkeit willst und dir der Speicher egal ist, dann außerhalb die Variablen initialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977099</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 08 Nov 2010 08:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 08:52:31 GMT]]></title><description><![CDATA[<p>Innen ist schneller.<br />
Falls mal nicht, kann der Compiler es für Dich unsichtbar heimlich nach außen legen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977100</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 08 Nov 2010 08:52:31 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 08:53:26 GMT]]></title><description><![CDATA[<p>gegen den speicher kannst du auch folgendes machen:</p>
<pre><code class="language-cpp">int main()
{
    int foo;
    // ... berechnungen
    {
         double a, b;
         for(int i = 0; i &lt; 10000; ++i)
         {
              // berechnungen
              a = 5.0;
              b = a;
         }
    } // hier werden a und b zerstört
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1977101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977101</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 08 Nov 2010 08:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:05:50 GMT]]></title><description><![CDATA[<p>Irgendwie widersprechen sich HighLigerBiMBams und volkards Antworten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977103</guid><dc:creator><![CDATA[wurst0r]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:21:22 GMT]]></title><description><![CDATA[<p>wurst0r schrieb:</p>
<blockquote>
<p>Irgendwie widersprechen sich HighLigerBiMBams und volkards Antworten?</p>
</blockquote>
<p>Ja. Aber beide haben Recht. volkard bei einfachen Datentypen: Diese werden nicht konstruiert oder zerstört. Bei komplizierten eigenen Klassen in denen der Konstrukotr/Destruktor nicht leer ist, würde ich es aber nochmal ausprobieren, da dürfte HighLigerBiMBams richtig liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977108</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:21:22 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:23:13 GMT]]></title><description><![CDATA[<p>wurst0r schrieb:</p>
<blockquote>
<p>Irgendwie widersprechen sich HighLigerBiMBams und volkards Antworten?</p>
</blockquote>
<p>Ja... Ich habe es mir gerade angeschaut... Volkard hat bei einfachen Datentypen recht. Innen ist minimal schneller.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;               // contains clock()

using namespace std;

clock_t innen()
{
	clock_t startzeit = clock ();

	long long a; 
	long long b;
	long long c;
	for(long long i=0; i &lt; 1000000000; i++) { 
		a = i * 2;
		b = i * 3;
		c = a + b;
	}

	return clock() - startzeit;
}

clock_t aussen()
{
	clock_t startzeit = clock ();

	for(long long i=0; i &lt; 1000000000; i++) { 
		long long a = i * 2;
		long long b = i * 3;
		long long c = a + b;
	}

	return clock() - startzeit;
}

int main()
{
	clock_t cl_aussen = aussen();
	clock_t cl_innen = innen();

	cout &lt;&lt; &quot;aussen: &quot; &lt;&lt; cl_aussen &lt;&lt; endl;
	cout &lt;&lt; &quot;innen : &quot; &lt;&lt; cl_innen &lt;&lt; endl;

	cin.get();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1977110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977110</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:28:44 GMT]]></title><description><![CDATA[<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Ja... Ich habe es mir gerade angeschaut... Volkard hat bei einfachen Datentypen recht. Innen ist minimal schneller.</p>
</blockquote>
<p>Irgendwie mag ich nicht glauben, dass du bei diesem Beispiel einen Unterschied misst. Hast du keine Optimierungen benutzt?</p>
<p>edit: Du hast sogar offensichtlich keine Optimierungen benutzt, weil dann einfach in beiden Fällen 0 rausgekommen wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977115</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:30:23 GMT]]></title><description><![CDATA[<p>Der Unterschied ist sehr minimal jedoch ist innen deutlich häufiger schneller. Ich habe keine Optimierungen benutzt. Die Rechenzeit beträgt bei meiner Klapperkiste über 20 Sekunden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977118</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:31:36 GMT]]></title><description><![CDATA[<p>Bei solchen Messungen habe ich auch schon erlebt, daß meistens die erste Messung klitzebißchen lahmer ist.<br />
Soll heißen:</p>
<pre><code class="language-cpp">int main()
{
//volkard hat natürlich recht
    clock_t cl_aussen = aussen();
    clock_t cl_innen = innen();

    cout &lt;&lt; &quot;aussen: &quot; &lt;&lt; cl_aussen &lt;&lt; endl;
    cout &lt;&lt; &quot;innen : &quot; &lt;&lt; cl_innen &lt;&lt; endl;

    cin.get();
    return 0;
}
</code></pre>
<pre><code class="language-cpp">int main()
{
//volkard hat natürlich unrecht
    clock_t cl_innen = innen();
    clock_t cl_aussen = aussen();

    cout &lt;&lt; &quot;innen : &quot; &lt;&lt; cl_innen &lt;&lt; endl;
    cout &lt;&lt; &quot;aussen: &quot; &lt;&lt; cl_aussen &lt;&lt; endl;

    cin.get();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1977119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977119</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:35:49 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Bei solchen Messungen habe ich auch schon erlebt, daß meistens die erste Messung klitzebißchen lahmer ist.</p>
</blockquote>
<p>Ist wohl der Fall -.- ich möchte mich auch gerade beerdigen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977124</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 09:44:22 GMT]]></title><description><![CDATA[<p>Vielleicht besser sowas messen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;               // contains clock()

using namespace std;

long long innen()
{
    long long result=0;
    long long a;
    long long b;
    long long c;
    for(long long i=0; i &lt; 1000000000; i++) {
        a = i * 2;
        b = i * 3;
        c = a + b;
        result += 3 * result + c;
    }
    return result;
}

long long aussen()
{
    long long result=0;
    for(long long i=0; i &lt; 1000000000; i++) {
        long long a = i * 2;
        long long b = i * 3;
        long long c = a + b;
        result += 3 * result + c;
    }
    return result;
}

int main()
{
    clock_t begin = clock();
    long long r = aussen();
    clock_t end = clock();

    cout &lt;&lt; &quot;ergebnis : &quot; &lt;&lt; r &lt;&lt; '\n';
    cout &lt;&lt; &quot;zeit : &quot; &lt;&lt; (end-begin)/double(CLOCKS_PER_SEC) &lt;&lt; '\n';

    cin.get();
    return 0;
}
</code></pre>
<p>Also immer was ausrechnen, was dann auch ausgegeben wird. Anderenfalls optimiert der Compiler das komplett weg. Und Summenformeln kann er. Also noch nicht mal result+=c ist sicher vor Optimierung auf 0s. Außerdem wenn möglich für faire Bedingungen sorgen, bei nur einmaliger Messung wir der erste oft benachteiligt. Und unbedingt mit -O3 messen, eigentlich auch mit -march=native (falls GCC, für MS weiß ich die Schalter nicht. Halt alle Optimierungen an und auf den Zielprozessor einstellen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977128</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 08 Nov 2010 09:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 10:27:26 GMT]]></title><description><![CDATA[<p>Das hier macht der Compiler draus. Sowohl aus innen als auch aus aussen.</p>
<pre><code class="language-asm">xorl    %edx, %edx            //d=0
        xorl    %eax, %eax            //a=0
        movabsq $5000000000, %rcx     //c=5000000000
.L7:
        leaq    (%rdx,%rax,4), %rax   //a=r+4*a
        addq    $5, %rdx              //d+=5
        cmpq    %rcx, %rdx            //if(d==c)
        jne     .L7                   //  goto L7
        rep //hier unwichtig, &quot;to avoid making the ret instruction be target of a conditional jump instruction&quot;
        ret                           //return a
</code></pre>
<p>Oh, das ist aber gemein! Innen oder außen ist vollig jenseits sinnvoller Betrachtung. Der Compiler ist einfach ein Schlauberger. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977139</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 08 Nov 2010 10:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to Variable in Schleife definieren on Mon, 08 Nov 2010 10:16:21 GMT]]></title><description><![CDATA[<p>Der Compiler ist einfach unfehlbar <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/1977142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977142</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 08 Nov 2010 10:16:21 GMT</pubDate></item></channel></rss>