<?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[Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde mir gerne durch eure Hilfe Klarheit verschaffen:</p>
<p>Nehmen wir an ich habe 3 zueinander gehörige Daten:<br />
index r, index c, und den wert v wobei z.B 10 solcher datensätze dann in eine obergruppe gehören sollen und dann die nächsten 5 z.B in die nächste obergruppe.</p>
<p>Realisieren könnte man es mittels eines 2D arrays welches arrays als elemente trägt.</p>
<ol>
<li>
<p>Ist der Zugriff auf ein array welches structures als elemente beinhaltet schneller oder wäre z.B das bauen von 3 arrays wo man dann natürlich korrekt indizieren muss schneller? Liegt dann wahrscheinlich in der Implementierung oder?</p>
</li>
<li>
<p>Wie sähe es mit struct vs. Klasse aus? also ein array voller structs oder ein array voller objekte?</p>
</li>
</ol>
<p>Danke euch vielmals</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188514/was-ist-beim-zugriff-schneller-mehrere-arrays-vs-1-struct</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 03:59:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188514.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 10:04:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 10:04:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde mir gerne durch eure Hilfe Klarheit verschaffen:</p>
<p>Nehmen wir an ich habe 3 zueinander gehörige Daten:<br />
index r, index c, und den wert v wobei z.B 10 solcher datensätze dann in eine obergruppe gehören sollen und dann die nächsten 5 z.B in die nächste obergruppe.</p>
<p>Realisieren könnte man es mittels eines 2D arrays welches arrays als elemente trägt.</p>
<ol>
<li>
<p>Ist der Zugriff auf ein array welches structures als elemente beinhaltet schneller oder wäre z.B das bauen von 3 arrays wo man dann natürlich korrekt indizieren muss schneller? Liegt dann wahrscheinlich in der Implementierung oder?</p>
</li>
<li>
<p>Wie sähe es mit struct vs. Klasse aus? also ein array voller structs oder ein array voller objekte?</p>
</li>
</ol>
<p>Danke euch vielmals</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336379</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Aug 2007 10:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 10:10:00 GMT]]></title><description><![CDATA[<p>Allgemeine Antwort: Miss nach (wobei - bei 10 Elementen wird das noch nicht viel Unterschied ausmachen)</p>
<p>@1: Ein Array von struct's hat den Vorteil, daß logisch zusammengehörende Elemente auch physisch zusammen untergebracht sind (das erleichtert das Caching und du mußt dich nicht darum kümmern, alle Arrays synchron zu halten). Ansonsten dürfte es vergleichbar schnell sein.</p>
<p>@2: Der einzige Unterschied zwischen struct und class ist der Default-Zugriff auf die Elemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336380</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 10:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 10:22:01 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>ja 10 elemente werdens nicht sein - werden dann durchaus &gt; 10000 Elemente.</p>
<p>Ja messen - dazu müsste ich ja erstmal was coden <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="😉"
    /> Aber danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336391</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Aug 2007 10:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 13:44:27 GMT]]></title><description><![CDATA[<p>Anbetrachts dessen, was ich vor kurzem an anderer Stelle im Forum angesprochen hatte, wuerde sich bei 10000 Einheiten unter Umstaenden doch die Ueberlegung lohnen, wie es um den Speicherbedarf bestellt ist.<br />
Lass deine 3 Werte beispielsweise 5 byte belegen, eine struct wird dann vemrutlich 8 byte gross sein (warum: siehe Thread &quot;siezeof() bei structs&quot;).<br />
Waehrend die Arrays der Einzelwerte also vermutlich 50000 byte umfassen werden, liegt man bei den structs schon bei 80000 byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336570</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Aug 2007 13:44:27 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 13:53:05 GMT]]></title><description><![CDATA[<p>Es ging ihm aber nicht um Platz, sondern um Geschwindigkeit <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>
<p>OK, ich begründe meine obige Bemerkung ausführlicher:<br />
Direkt von den nötigen Indexberechnungen dürfte es nicht viel Unterschied machen, ob du x[i] oder data[i].x schreibst. ABER: Wenn du ein Element deines Datensatzes verwendest, steht die Chance hoch, daß die übrigen auch in nächster Zeit benötigt werden. Und bei mehreren Arrays hast du den Datensatz über den halben Speicher verstreut, was bedeutet, daß du im besten Fall drei Cache-Misses bekommst, wenn du einen bestimmten Datensatz ausgeben willst.</p>
<p>(und außerdem hast du den zusätzlichen Aufwand, alle Teile des Datensatzes synchron zu verschieben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336584</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 13:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 14:00:55 GMT]]></title><description><![CDATA[<p>ah sehr interessant danke.<br />
Verstehe ich das jetzt richtig, dass ich bei den arrays also durchaus mehrere cache-misses habe als mit einem struct?<br />
Wie kann man sich das denn vorstellen dass man dann gleich das nächste Datum erreicht? Irgendwie ein pointer der auf den speicher zeigt und hin und her rutscht? Und warum denn mindestens 3 Misses bei 3 arrays?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336591</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Aug 2007 14:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 14:55:28 GMT]]></title><description><![CDATA[<p>das haengt vom zugriffsmuster ab. greiffst du immer nur auf ein element, ist structs of arrays besser. greiffst du immer auf viele elemente derselben struct zu, ist array of structs besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336631</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 01 Aug 2007 14:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist beim Zugriff schneller: Mehrere Arrays vs. 1 struct on Wed, 01 Aug 2007 15:02:28 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>ah sehr interessant danke.<br />
Verstehe ich das jetzt richtig, dass ich bei den arrays also durchaus mehrere cache-misses habe als mit einem struct?<br />
Wie kann man sich das denn vorstellen dass man dann gleich das nächste Datum erreicht? Irgendwie ein pointer der auf den speicher zeigt und hin und her rutscht? Und warum denn mindestens 3 Misses bei 3 arrays?</p>
</blockquote>
<p>Nuja, wenn du in einer Funktion auf alle drei Daten zugreifst, dann kann bei separaten arrays folgendes passieren:</p>
<pre><code class="language-cpp">void bla(int i)
{
  cout &lt;&lt; r[i]  //r[i] nicht im cache -&gt; miss
       &lt;&lt; c[i]  //c[i] nicht im cache -&gt; miss
       &lt;&lt; v[i]  //v[i] nicht im cache -&gt; miss
       &lt;&lt;endl;
}
</code></pre>
<p>andernfalls bei structs:</p>
<pre><code class="language-cpp">void bla(int i)
{
  cout &lt;&lt; str[i].r  //str[i] nicht im cache -&gt; miss
       &lt;&lt; str[i].c  //str[i] ist im cache -&gt; kein miss
       &lt;&lt; str[i].v  //str[i] ist im cache -&gt; kein miss
       &lt;&lt;endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1336639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336639</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Aug 2007 15:02:28 GMT</pubDate></item></channel></rss>