<?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[Zeit sparen bei mehrfachem Funktionsaufruf]]></title><description><![CDATA[<p>Ich benötige in einer Funktion mehrfach clock(). Jetzt die Frage: was läuft am schnellsten? Oder optimiert der Compiler sämtliche Varianten, so das identischer Code produziert wird?</p>
<pre><code class="language-cpp">Im Header:
int lastClock;
float speedFactor;

Verschiedene Versionen der Funktion:

//1.
speedFactor = (clock() - lastClock) / 25;
lastClock = clock();

//2.
int clockBuffer = clock();
speedFactor = (clockBuffer - lastClock) / 25;
lastClock = clockBuffer;

//3.
//clockbuffer als Member deklarieren anstatt bei jedem Aufruf:

clockBuffer = clock();
speedFactor = (clockBuffer - lastClock) / 25;
lastClock = clockBuffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/298655/zeit-sparen-bei-mehrfachem-funktionsaufruf</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 18:47:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298655.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jan 2012 10:14:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:14:29 GMT]]></title><description><![CDATA[<p>Ich benötige in einer Funktion mehrfach clock(). Jetzt die Frage: was läuft am schnellsten? Oder optimiert der Compiler sämtliche Varianten, so das identischer Code produziert wird?</p>
<pre><code class="language-cpp">Im Header:
int lastClock;
float speedFactor;

Verschiedene Versionen der Funktion:

//1.
speedFactor = (clock() - lastClock) / 25;
lastClock = clock();

//2.
int clockBuffer = clock();
speedFactor = (clockBuffer - lastClock) / 25;
lastClock = clockBuffer;

//3.
//clockbuffer als Member deklarieren anstatt bei jedem Aufruf:

clockBuffer = clock();
speedFactor = (clockBuffer - lastClock) / 25;
lastClock = clockBuffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2172193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172193</guid><dc:creator><![CDATA[kauflummi]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:21:58 GMT]]></title><description><![CDATA[<p>clock ist vielleicht ein blödes Beispiel, weil der Funktionswert bei jedem Aufruf anders sein kann. Das erste Beispiel macht also was anderes als die anderen beiden. Und das dritte ist schlechter als das zweite, wenn du die Membervariable sonst nicht brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172196</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:32:48 GMT]]></title><description><![CDATA[<p>Das ist eine Funktion, die bei einem Spiel in jedem Loop ausgeführt wird. Wäre es da nicht schneller, die Variable nicht jedes mal neu deklarieren zu müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172202</guid><dc:creator><![CDATA[kauflummi]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:34:52 GMT]]></title><description><![CDATA[<p>kauflummi schrieb:</p>
<blockquote>
<p>die Variable nicht jedes mal neu deklarieren zu müssen?</p>
</blockquote>
<p>Das ist egal. Wird vom Compiler wegoptimiert, und selbst wenn nicht, sind Speicheranforderungen an den Stack so ziemlich das Schnellste was es gibt. <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/2172203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172203</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:55:31 GMT]]></title><description><![CDATA[<p>Danke für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172212</guid><dc:creator><![CDATA[kauflummi]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 10:58:28 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>kauflummi schrieb:</p>
<blockquote>
<p>die Variable nicht jedes mal neu deklarieren zu müssen?</p>
</blockquote>
<p>Das ist egal. Wird vom Compiler wegoptimiert, und selbst wenn nicht, sind Speicheranforderungen an den Stack so ziemlich das Schnellste was es gibt. <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>
</blockquote>
<p>Um genau zu sein normalerweise nur eine Subtraktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172213</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 25 Jan 2012 10:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 11:12:37 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>kauflummi schrieb:</p>
<blockquote>
<p>die Variable nicht jedes mal neu deklarieren zu müssen?</p>
</blockquote>
<p>Das ist egal.</p>
</blockquote>
<p>Würde ich nicht sagen, ich würde im Gegenteil davon absehen, den buffer als Membervariable zu definieren, da das den Compiler ggf. dazu zwingt, den this-Pointer zu dereferenzieren, was dazu führen kann, dass je nach Lage des Objekts Speicher in den Cache geladen werden muss usw., schließlich muss der Wert auf jeden Fall im Objekt gespeichert werden. Bei einer funktionslokalen temporären Variable hat der Compiler dagegen extrem gute Chancen, die Variable komplett wegzuoptimieren und den Wert einfach in einem Register zwischenzulagern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172224</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 25 Jan 2012 11:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 13:26:26 GMT]]></title><description><![CDATA[<p>Der stack pointer wird nicht bei jeder Variablen verschoben, sondern eher einmal pro Funktion und damit sowieso, also unabhängig von der Hilfsvariablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172288</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 25 Jan 2012 13:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 13:34:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27594">@kauflummi</a></p>
<ol>
<li>
<p>clock() ist je nach Implementierung nicht ganz billig, d.h. in engen Schleifen eher damit sparen.</p>
</li>
<li>
<p>Was du machst sieht mir danach aus, als ob sowieso nur die &quot;gepufferte&quot; Variante in Frage kommt. Falls nämlich zwischen Zeile 1 und 2 deiner Variante (1) ein Clock-Tick passiert, dann &quot;verlierst&quot; du den in der Berechnung. Das will man normalerweise nicht.</p>
</li>
</ol>
<p>Also entweder Variante (2) oder (3). (3) ist IMO Blödsinn. Kann in Spezialfällen vielleicht Sinn machen, aber (2) ist die Übliche Variante.</p>
<p>Je nachdem was du programmierst kann es aber auch Sinn machen die Zeit in den einzelnen Funktionen gar nicht abzufragen, sondern als Parameter mitzugeben. Oder ggf. über einen speziellen Getter zugänglich zu machen, der allerdings auch einen gepufferten Wert zurückgibt.</p>
<p>Bei Spielen macht man es z.B. üblicherweise so - also pro Update nur 1x zentral die Clock abfragen, und alle Programmteile verwenden dann diesen gepufferten Wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172294</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 25 Jan 2012 13:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 13:35:57 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>kauflummi schrieb:</p>
<blockquote>
<p>die Variable nicht jedes mal neu deklarieren zu müssen?</p>
</blockquote>
<p>Das ist egal.</p>
</blockquote>
<p>Würde ich nicht sagen, ich würde im Gegenteil davon absehen, den buffer als Membervariable zu definieren, da das den Compiler ggf. dazu zwingt, den this-Pointer zu dereferenzieren, was dazu führen kann, dass je nach Lage des Objekts Speicher in den Cache geladen werden muss usw., schließlich muss der Wert auf jeden Fall im Objekt gespeichert werden. Bei einer funktionslokalen temporären Variable hat der Compiler dagegen extrem gute Chancen, die Variable komplett wegzuoptimieren und den Wert einfach in einem Register zwischenzulagern.</p>
</blockquote>
<p>Und ich wiederum würde die Entscheidung Member/Lokal nicht davon abhängig machen was vielleicht schneller ist, sondern was konzeptionell &quot;richtiger&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172296</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 25 Jan 2012 13:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 13:55:16 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und ich wiederum würde die Entscheidung Member/Lokal nicht davon abhängig machen was vielleicht schneller ist, sondern was konzeptionell &quot;richtiger&quot; ist.</p>
</blockquote>
<p>Davon mal ganz abgesehen, ja. Der OP hat aber nach Schnelligkeit gefragt und ich hab ausnahmsweise mal drauf verzichtet, mein übliches &quot;machs gut bevor dus schnell machst&quot; Gemecker vom Stapel zu lassen <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/2172303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172303</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 25 Jan 2012 13:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 14:28:43 GMT]]></title><description><![CDATA[<p>Hihi, OK <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/2172319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172319</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 25 Jan 2012 14:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 14:40:11 GMT]]></title><description><![CDATA[<p>Wie wäre es damit?</p>
<pre><code class="language-cpp">speed = (clock() - lastclock) / 25;
lastclock = speed * 25 + lastclock;
</code></pre>
<p>Weis jetzt nicht ob das schneller ist, aber man spart den Puffer <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/2172322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172322</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 25 Jan 2012 14:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zeit sparen bei mehrfachem Funktionsaufruf on Wed, 25 Jan 2012 15:09:30 GMT]]></title><description><![CDATA[<p>pyhax schrieb:</p>
<blockquote>
<p>Weis jetzt nicht ob das schneller ist, aber man spart den Puffer <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>
</blockquote>
<p>Pro:<br />
+ man spart den Puffer</p>
<p>Contra:<br />
- der gesparte Puffer wird eh wegoptimiert -&gt; Pluspunkt ist keiner<br />
- man machts unnötig unübersichtlich, unter anderem weil man den Puffer spart<br />
- Man holt sich durch die zusätzliche Multiplikation noch einen Performancenachteil, wenn der Compiler das Gemurkse nicht auflöst. (Multiplikationen und vor allem Divisionen sind ungleich teurer als Addition/Subtraktion)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172334</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 25 Jan 2012 15:09:30 GMT</pubDate></item></channel></rss>