<?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[Verwirrendes verhalten bei for-schleife]]></title><description><![CDATA[<p>Hallo @all</p>
<pre><code>std::array&lt;std::array&lt;unsigned char , 256&gt;,14&gt; q;

for( int i = 0; i &lt; 14; i++ )
	for( int j = 0; j &lt; 256; j++ )
		q[i][j] = 't';

auto a = std::chrono::system_clock::now();
char c = 'A';
for( int m = 0; m &lt; 30000000; m++ )
{
	for( const std::array&lt;unsigned char,256&gt;&amp; t:q )
		c = t[(unsigned char)c];
}

auto b = std::chrono::system_clock::now();

cout &lt;&lt; &quot;Fertig\n&quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( b - a ).count() &lt;&lt; endl;

a = std::chrono::system_clock::now();
c = 'A';
for( int m = 0; m &lt; 30000000; m++ )
{
	for( int i = 0; i &lt; 14; i++ )
		c = q[i][(unsigned char) c];
}

b = std::chrono::system_clock::now();

cout &lt;&lt; &quot;Fertig\n&quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( b - a ).count();
</code></pre>
<p>Folgender Code vergleicht die Laufzeit zweier Schleifen, welche exakt dasselbe tun. Die Erste nutzt die neue c++11 Schleife ( for( ... : ... ) ) , die Zweite nutzt die klassische &quot;C&quot; Schleife mit einer Laufvariable.</p>
<p>Wenn ich den Code ausführe, ist <strong>erstaunlicherweise</strong> die klassische for-schleife am Schnellsten!</p>
<p>Warum? Meine ganze Iteratoren-sind-toll-Welt ist heute zusammengebrochen!</p>
<p>mfG</p>
<p>shft</p>
<p>zu meinem Test:<br />
Compiler: VS 2013 Community<br />
Wichtige Einstellungen: Release , Optimierung: Disabled<br />
erzeugter Code: 32-Bit</p>
<p>Ergebnis (auf meinem Rechner):<br />
c++11-Schleife: ~7 seks<br />
C-Schleife: 2 seks</p>
<p>Die anderen Schleifen-Arten:<br />
Normales Iterieren ( for ( iterator it = ... ; it != end; it++) ): ~7 seks<br />
Reverse Iterieren: ~ 25seks!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331120/verwirrendes-verhalten-bei-for-schleife</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 06:03:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331120.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Feb 2015 17:55:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 17:55:57 GMT]]></title><description><![CDATA[<p>Hallo @all</p>
<pre><code>std::array&lt;std::array&lt;unsigned char , 256&gt;,14&gt; q;

for( int i = 0; i &lt; 14; i++ )
	for( int j = 0; j &lt; 256; j++ )
		q[i][j] = 't';

auto a = std::chrono::system_clock::now();
char c = 'A';
for( int m = 0; m &lt; 30000000; m++ )
{
	for( const std::array&lt;unsigned char,256&gt;&amp; t:q )
		c = t[(unsigned char)c];
}

auto b = std::chrono::system_clock::now();

cout &lt;&lt; &quot;Fertig\n&quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( b - a ).count() &lt;&lt; endl;

a = std::chrono::system_clock::now();
c = 'A';
for( int m = 0; m &lt; 30000000; m++ )
{
	for( int i = 0; i &lt; 14; i++ )
		c = q[i][(unsigned char) c];
}

b = std::chrono::system_clock::now();

cout &lt;&lt; &quot;Fertig\n&quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( b - a ).count();
</code></pre>
<p>Folgender Code vergleicht die Laufzeit zweier Schleifen, welche exakt dasselbe tun. Die Erste nutzt die neue c++11 Schleife ( for( ... : ... ) ) , die Zweite nutzt die klassische &quot;C&quot; Schleife mit einer Laufvariable.</p>
<p>Wenn ich den Code ausführe, ist <strong>erstaunlicherweise</strong> die klassische for-schleife am Schnellsten!</p>
<p>Warum? Meine ganze Iteratoren-sind-toll-Welt ist heute zusammengebrochen!</p>
<p>mfG</p>
<p>shft</p>
<p>zu meinem Test:<br />
Compiler: VS 2013 Community<br />
Wichtige Einstellungen: Release , Optimierung: Disabled<br />
erzeugter Code: 32-Bit</p>
<p>Ergebnis (auf meinem Rechner):<br />
c++11-Schleife: ~7 seks<br />
C-Schleife: 2 seks</p>
<p>Die anderen Schleifen-Arten:<br />
Normales Iterieren ( for ( iterator it = ... ; it != end; it++) ): ~7 seks<br />
Reverse Iterieren: ~ 25seks!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442294</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 11 Feb 2015 17:55:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 18:31:53 GMT]]></title><description><![CDATA[<p>bei mir (g++ 4.8.2, l*n*x) läuft die erste Schleife (3.8 Sek) schneller als die zweite (5.3 Sek)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442300</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Wed, 11 Feb 2015 18:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 19:01:16 GMT]]></title><description><![CDATA[<blockquote>
<p>Optimierung: Disabled</p>
</blockquote>
<p>Niemand interessiert sich für die Laufzeit von unoptimiertem Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442305</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 11 Feb 2015 19:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 19:22:22 GMT]]></title><description><![CDATA[<p>Unoptimiert ist die erste Version bei mir auch schneller, aber das interessiert wie SeppJ schon gesagt hat ja auch keinen.<br />
Optimiert sind sind beide gleichschnell, was mich nicht weiter verwundert. Man muss natürlich davor dafür sorgen dass die Schleife nicht ganz rausoptimiert wird... <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/2442313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442313</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Wed, 11 Feb 2015 19:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 19:24:18 GMT]]></title><description><![CDATA[<p>Die standardlibraries, zumindest die von VS verwendete, haben im debug-build eingebaute Laufzeit checks in den iteratoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442314</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Wed, 11 Feb 2015 19:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 21:43:03 GMT]]></title><description><![CDATA[<p>Wenn ich volle Optimierung einstelle, sowie Geschwindigkeit bevorzugen, ist die 2.Version immernoch messbar schneller, also so 3-4 sekunden unterschied</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442344</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 11 Feb 2015 21:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 21:45:45 GMT]]></title><description><![CDATA[<p>Kann es vllt sein, dass trotz release trotzdem ausversehen die debug libs verwendet werden? Wenn ja, kann ich das im Linker ändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442345</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 11 Feb 2015 21:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 21:56:43 GMT]]></title><description><![CDATA[<p>shft schrieb:</p>
<blockquote>
<p>Kann es vllt sein, dass trotz release trotzdem ausversehen die debug libs verwendet werden? Wenn ja, kann ich das im Linker ändern?</p>
</blockquote>
<p>Daran lag es!<br />
Habe meine Runtime Lib auf Debug umgestellt gehabt (im Debug) wodurch sich natürlich die STL extrem verlangsamt hat ^^</p>
<p>Sry für die Aufregung^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442347</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 11 Feb 2015 21:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrendes verhalten bei for-schleife on Wed, 11 Feb 2015 21:57:38 GMT]]></title><description><![CDATA[<p>* im Release</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442348</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 11 Feb 2015 21:57:38 GMT</pubDate></item></channel></rss>