<?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[Geschwidigkeit]]></title><description><![CDATA[<p>Hallo Forumler,<br />
ich habe jetzt etwas programmiert, und da wollte ich mal fragen, welches schneller ist und wieso:</p>
<pre><code class="language-cpp">class ST;//ST ist eine Klasse mit vielen Elementen
ST *pST;
pST = new ST[numST];

//hier kommts
//Nummer 1
for(int i=0; i &lt; numST ; i++)
  {
  ST[i].Objekt = IRGENDWAS;
  }

//Nummer 2
ST *DurchlaufST;
for(int i=0, DurchlaufST = pST[0]; i &lt; numST; i++,DurchlaufST++)
  {
  DurchlaufST-&gt;Objekt = IRGENDWAS;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/174062/geschwidigkeit</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:08:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174062.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Feb 2007 15:27:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 15:27:34 GMT]]></title><description><![CDATA[<p>Hallo Forumler,<br />
ich habe jetzt etwas programmiert, und da wollte ich mal fragen, welches schneller ist und wieso:</p>
<pre><code class="language-cpp">class ST;//ST ist eine Klasse mit vielen Elementen
ST *pST;
pST = new ST[numST];

//hier kommts
//Nummer 1
for(int i=0; i &lt; numST ; i++)
  {
  ST[i].Objekt = IRGENDWAS;
  }

//Nummer 2
ST *DurchlaufST;
for(int i=0, DurchlaufST = pST[0]; i &lt; numST; i++,DurchlaufST++)
  {
  DurchlaufST-&gt;Objekt = IRGENDWAS;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1233396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233396</guid><dc:creator><![CDATA[KarKn]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 15:29:25 GMT]]></title><description><![CDATA[<p>Nimm das was sich beim konkreten Beispiel besser liest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233398</guid><dc:creator><![CDATA[gesunder Menschenverstand]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 15:31:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//hier kommts
//Nummer 1
for(int i=0; i &lt; numST ; i++)
  {
  ST[i].Objekt = IRGENDWAS;   // Einmal ST::op=
  }

//Nummer 2
ST *DurchlaufST;
for(int i=0, DurchlaufST = pST[0]; i &lt; numST; i++,DurchlaufST++)  // Einmal op= für Zeiger, einmal increment für Zeiger
  {
  DurchlaufST-&gt;Objekt = IRGENDWAS;   // EInmal dereferenzieren (op*), einmal ST::op=
  }
</code></pre>
<p>Teste es doch mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233399</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 15:53:53 GMT]]></title><description><![CDATA[<p>Also ist Nummer 1 schneller?</p>
<p>Dann müsste bei dem hier doch Nummer 2 schneller sein, oder?</p>
<pre><code class="language-cpp">class Data
{
float Elements[NUM_ELEMENTS];
...
}

class ST
{
Data Datas[7];
...
}

ST *pST = new ST[numST];

//Nummer 1
for(int i=0; i&lt;numST; i++)
  for(int j=0; j &lt; 7; j++)
    {
    Funktion1(pST[i].Datas[j].Elements[0]);
    Funktion2(pST[i].Datas[j].Elements[4]);
    }

//Nummer 2
Data TempData;

for(int i=0; i&lt;numST; i++)
  for(int j=0; j &lt; 7; j++)
    {
    TempData = pST[i].Datas[j];

    Funktion1(TempData.Elements[0]);
    Funktion2(TempData.Elements[4]);
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1233420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233420</guid><dc:creator><![CDATA[KarKn]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:02:46 GMT]]></title><description><![CDATA[<p>Wie wäre es wenn du es einfach mal mist? ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233427</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:06:25 GMT]]></title><description><![CDATA[<p>Je nach Compiler und Optimierungsstufe kann es Unterschiede geben. Bedenke außerdem auch das berühmte, <a href="http://de.wikipedia.org/wiki/Tony_Hoare" rel="nofollow">Tony Hoare</a> zugeschriebene <a href="http://de.wikiquote.org/wiki/Tony_Hoare" rel="nofollow">Zitat</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233430</guid><dc:creator><![CDATA[Konstruktör]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:17:36 GMT]]></title><description><![CDATA[<p>also nur durch das betrachten (ohne zu messen würd ich sagen nr1)</p>
<pre><code class="language-cpp">//Nummer 1
for(int i=0; i&lt;numST; i++)
  for(int j=0; j &lt; 7; j++) //Quadratisches Wachstum durch 2 schleifen
    {
    Funktion1(pST[i].Datas[j].Elements[0]); //Ein Aufruf 2mal per . zugreifen
    Funktion2(pST[i].Datas[j].Elements[4]); // &quot;&quot;
    }

//Gesamt n² 2 aufrufe und 4 . zugriffe

//Nummer 2
Data TempData;

for(int i=0; i&lt;numST; i++)
  for(int j=0; j &lt; 7; j++) //n²
    {
    TempData = pST[i].Datas[j]; //  2 zuweisungen ....

    Funktion1(TempData.Elements[0]); //
    Funktion2(TempData.Elements[4]); // 3 . zugriffe und 2 mal Array
    }
</code></pre>
<p>ist nicht alles -.- hatte keine lust mehr xD<br />
je mehr zuweisungen, aufrufe außerhalb der schleife stehen desto schneller wird die schleife, und schleifen erzeugen die programmlaufzeit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233446</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:30:13 GMT]]></title><description><![CDATA[<p>Es ist gut möglich, dass der Compiler aus Nr. 1 dann intern ein Nr. 2 macht. Also wirst du messen müssen, um auf herauszufinden, was schneller ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233460</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:33:24 GMT]]></title><description><![CDATA[<p>Hey!</p>
<pre><code class="language-cpp">Funktion1(pST[i].Datas[j].Elements[0]); //Ein Aufruf 2mal per . zugreifen
</code></pre>
<p>Das hat doch nichts mit der Laufzeit zu tun, oder? Es könnte da auch stehen:</p>
<pre><code class="language-cpp">Funktion1(pST[i].Datas[j].Blablas.Extras.Irgendwas.Lalala.Elements[0]);
</code></pre>
<p>Im Maschinencode findet man dann doch nur den endgültigen Wert eben von Elements[0], oder?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233464</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 16:48:14 GMT]]></title><description><![CDATA[<p>im prinzip nicht, aber wenn ein sprung bei der speicherstelle dazukommt dauerts auch länger aber dieser zeitunterschied ist vernachlässigbar</p>
<p>dennoch ändert es nichts an der sache dass nr1 schneller sein müsste<br />
da es nur 2 zuweisen beinhaltet</p>
<p>Edit:<br />
Funktion1(pST[i].Datas[j].Blablas.Extras.Irgendwas.Lalala.Elements[0]);</p>
<p>ich glaub die auswärtung würde länger dauern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233476</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Thu, 22 Feb 2007 16:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Thu, 22 Feb 2007 17:57:42 GMT]]></title><description><![CDATA[<p>Ja danke,<br />
aber ganz schlau bin ich immer noch nicht, gibt es einen Geschwidigkeitsunterschied bei Zuweisungen, wenn man über viele Objekte auf etwas zugreift?:</p>
<pre><code class="language-cpp">BigClass Class;
BigClass *pClass = new BigClass;
int a;

//1
Class.Object.Data.Element = 0;
//2
*pClass-&gt;Object-&gt;Data-&gt;Element = 0;
//3
a = 0;
</code></pre>
<p>Müsste doch alles gleich schnell sein, weil es im Maschinencode keine Klassen gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233544</guid><dc:creator><![CDATA[KarKn]]></dc:creator><pubDate>Thu, 22 Feb 2007 17:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 02:32:29 GMT]]></title><description><![CDATA[<p>wenn du das so genau wissen willst dann probier es doch einfach</p>
<pre><code class="language-cpp">#include &lt;ctime&gt;
...
clock_t a = clock();

Class.Object.Data.Element = 0;

clock_t b = clock();

dauer = b-a;

cout &lt;&lt; dauer&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1233801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233801</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Fri, 23 Feb 2007 02:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 07:00:41 GMT]]></title><description><![CDATA[<p>Das nenn ich mal n schlecht gewähltes Beispiel:</p>
<pre><code class="language-cpp">//1
Class.Object.Data.Element = 0;
//2
*pClass-&gt;Object-&gt;Data-&gt;Element = 0;
</code></pre>
<p>Seit wann werden, wenn man ein Object auf dem Heap anlegt, aus den Membern auch Pointer?<br />
Und wenn pClass schon n Zeiger ist was soll dann das Dereferenzieren (*).</p>
<p>Meiner Meinung nach ist die Arraynotation in manchen Fällen schneller, da der Compiler Zuriffe per Zeiger nicht so gut optimieren kann. Ein Zeiger kann quasi überall hin zeigen. Bei Zugriff über [] in einer Schleife kann der Compiler annehmen, dass es sich um im Speicher zusammenhängende Blöcke handelt und dementsprechend optimieren.</p>
<p>Am besten man testet in jedem Fall was die schnellste Methode ist.</p>
<p>Verge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233825</guid><dc:creator><![CDATA[xivVerge]]></dc:creator><pubDate>Fri, 23 Feb 2007 07:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 08:22:24 GMT]]></title><description><![CDATA[<p>Stelfer schrieb:</p>
<blockquote>
<p>Edit:<br />
Funktion1(pST[i].Datas[j].Blablas.Extras.Irgendwas.Lalala.Elements[0]);</p>
<p>ich glaub die auswärtung würde länger dauern</p>
</blockquote>
<p>nein, würde sie nicht. aus &quot;.Blablas.Extras.Irgendwas.Lalala.Elements&quot; wird der compiler eine relative addresse berechnen können. am ende bleibt dann sowas stehen wie:</p>
<blockquote>
<p>*(&amp;(pST[i].Datas[j])+Offset)</p>
</blockquote>
<p>und dann ist es egal, wielang diese Kette ist. sobald allerdings zeiger ins spiel kommen, wirds komplizierter.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13504">@stelfer</a> du weist schon, dass du clock() vergessen kannst, sobald das betriebssystem nebenbei noch irgendnen andren thread laufen lässt? mal davon ab, dass der compiler das einfach rausoptimieren würde, so wie es jetzt da steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233865</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 23 Feb 2007 08:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 08:25:17 GMT]]></title><description><![CDATA[<p>[quote=&quot;otze&quot;]</p>
<p>Stelfer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13504">@stelfer</a> du weist schon, dass du clock() vergessen kannst, sobald das betriebssystem nebenbei noch irgendnen andren thread laufen lässt? mal davon ab, dass der compiler das einfach rausoptimieren würde, so wie es jetzt da steht.</p>
</blockquote>
<p>Falsch. Clock misst die Zeit die der Prozess verbraucht hat. Wenn der Prozess z.B. 5 sekunden arbeitet und zwischendrin 20sekunden vom Betriebssystem suspended wurde, zeigt clock tatsächlich nur 5 Sekunden an.</p>
<p>Anders ist das mit time() weil hier die absolute Zeit zwischen zwei Messungen angegeben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233868</guid><dc:creator><![CDATA[otzes V]]></dc:creator><pubDate>Fri, 23 Feb 2007 08:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 12:31:55 GMT]]></title><description><![CDATA[<p>ja gut dann schreib ich es noch rein bevor es andere machen -.- du musst den bereich zwischen deinen messungen öfters durchführenlassen damit du diese zeit auch messen kannst ...</p>
<p>hoffe es beschwert sich nun niemand</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234026</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Fri, 23 Feb 2007 12:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwidigkeit on Fri, 23 Feb 2007 22:43:13 GMT]]></title><description><![CDATA[<p>[quote=&quot;otzes V&quot;]</p>
<p>otze schrieb:</p>
<blockquote>
<p>Stelfer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13504">@stelfer</a> du weist schon, dass du clock() vergessen kannst, sobald das betriebssystem nebenbei noch irgendnen andren thread laufen lässt? mal davon ab, dass der compiler das einfach rausoptimieren würde, so wie es jetzt da steht.</p>
</blockquote>
<p>Falsch. Clock misst die Zeit die der Prozess verbraucht hat. Wenn der Prozess z.B. 5 sekunden arbeitet und zwischendrin 20sekunden vom Betriebssystem suspended wurde, zeigt clock tatsächlich nur 5 Sekunden an.</p>
<p>Anders ist das mit time() weil hier die absolute Zeit zwischen zwei Messungen angegeben wird.</p>
</blockquote>
<p>Ja, laut Doku/Standard ist das so. Laut Realität ist das zumindest auf Windows anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234399</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Feb 2007 22:43:13 GMT</pubDate></item></channel></rss>