<?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[Performance vs. Design]]></title><description><![CDATA[<p>Hallo Männer,</p>
<p>habe einen vector welche Zustände darstellt.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; vState;
</code></pre>
<p>diese zustände will ich iterieren (was schnell gehen muss).</p>
<p>nun wollte ich die Zustände in einer klasse Kapseln:</p>
<pre><code class="language-cpp">class States{

std::vector&lt;int&gt; m_vState;
.
.
.
const int&amp; operator[](const &amp;size_t iIndex){
 return m_vState[iIndex];
}
}
</code></pre>
<p>Dadurch das ich in dem []operator den index bzw. den wert als referenz zurückgebe, dürfte die iteration über die klasse nich langsamer sein oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217177/performance-vs-design</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 17:40:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217177.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jul 2008 06:41:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 06:41:18 GMT]]></title><description><![CDATA[<p>Hallo Männer,</p>
<p>habe einen vector welche Zustände darstellt.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; vState;
</code></pre>
<p>diese zustände will ich iterieren (was schnell gehen muss).</p>
<p>nun wollte ich die Zustände in einer klasse Kapseln:</p>
<pre><code class="language-cpp">class States{

std::vector&lt;int&gt; m_vState;
.
.
.
const int&amp; operator[](const &amp;size_t iIndex){
 return m_vState[iIndex];
}
}
</code></pre>
<p>Dadurch das ich in dem []operator den index bzw. den wert als referenz zurückgebe, dürfte die iteration über die klasse nich langsamer sein oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540773</guid><dc:creator><![CDATA[OptimzerC]]></dc:creator><pubDate>Fri, 04 Jul 2008 06:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 07:00:10 GMT]]></title><description><![CDATA[<p>Das wird eh ge-inline-t.</p>
<p>//edit:<br />
Im Prinzip wäre es bei int langsamer, da du eine 4-bytes-große Adresse auf ein 4-bytes-großes int zurück geben würdest, genauso wie du eine Adresse auf ein vermutlich 4-bytes-großes size_t übergeben würdest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540777</guid><dc:creator><![CDATA[wandrer]]></dc:creator><pubDate>Fri, 04 Jul 2008 07:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 07:08:05 GMT]]></title><description><![CDATA[<p>stimmt, size_t ist ja 8 byte groß...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540788</guid><dc:creator><![CDATA[OptimzerC]]></dc:creator><pubDate>Fri, 04 Jul 2008 07:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 07:27:25 GMT]]></title><description><![CDATA[<p>ja...ne, ich glaub size_t wird meistens genauso groß sein wie int... register-größe eben --&gt; mit einem &quot;push&quot; ist das auf dem stack. (bzw. mit einem &quot;mov&quot; im register)</p>
<p>Aber alles egal, wegen inline!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540808</guid><dc:creator><![CDATA[wandrer]]></dc:creator><pubDate>Fri, 04 Jul 2008 07:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 07:34:46 GMT]]></title><description><![CDATA[<p>size_t sollte nicht so groß wie int sondern wie der systemübliche zeiger sein. das ist auf den meisten systemen haarspalterei, aber es gibt 64bit compiler, die ein 32bit int definiert haben.</p>
<p>aber recht hast du: implizites inline -&gt; völlig egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540813</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 07:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 10:20:15 GMT]]></title><description><![CDATA[<p>d.h.</p>
<pre><code class="language-cpp">States oS;

int i= oS[5];
</code></pre>
<p>wird inline so optimiert:</p>
<pre><code class="language-cpp">States oS;

int i=oS.m_vStates[5];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1540900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540900</guid><dc:creator><![CDATA[OptimzerC]]></dc:creator><pubDate>Fri, 04 Jul 2008 10:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 10:42:52 GMT]]></title><description><![CDATA[<p>ja. solange du deinen compiler lässt. will heißen: im debug mode wird er es nicht tun, aber sonst schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540914</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 10:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 11:03:52 GMT]]></title><description><![CDATA[<blockquote>
<p>aber es gibt 64bit compiler, die ein 32bit int definiert haben.</p>
</blockquote>
<p>MSVC zum bleistift</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540927</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 04 Jul 2008 11:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 14:42:49 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p>size_t sollte nicht so groß wie int sondern wie der systemübliche zeiger sein. das ist auf den meisten systemen haarspalterei, aber es gibt 64bit compiler, die ein 32bit int definiert haben.</p>
</blockquote>
<p>Ich dachte, das wäre so definiert, also Integer-Grösse:</p>
<pre><code class="language-cpp">typedef unsigned int size_t;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1541077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541077</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Jul 2008 14:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 18:18:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@nexus</a> so kann es definiert werden, wenn int und die größe des zeigers zusammenfallen. aber bei einem compiler, der eine unterschiedliche größen für ints und zeiger hat (wie der von hustbaer erwähnte 64bit-compiler von ms), wird er normalerweise über die größe des zeigers realisiert, damit bspw vector&lt;char&gt; auch den kompletten speicher nutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541205</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 18:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 18:57:29 GMT]]></title><description><![CDATA[<p>OptimzerC schrieb:</p>
<blockquote>
<p>diese zustände will ich iterieren (was schnell gehen muss).</p>
</blockquote>
<p>Woher weißt du, dass das scnellgehen muss? hast du das gemessen oder geschätzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541217</guid><dc:creator><![CDATA[sososoh]]></dc:creator><pubDate>Fri, 04 Jul 2008 18:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 19:20:58 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@nexus</a> so kann es definiert werden, wenn int und die größe des zeigers zusammenfallen. aber bei einem compiler, der eine unterschiedliche größen für ints und zeiger hat (wie der von hustbaer erwähnte 64bit-compiler von ms), wird er normalerweise über die größe des zeigers realisiert, damit bspw vector&lt;char&gt; auch den kompletten speicher nutzen kann.</p>
</blockquote>
<p>Aber ist das nicht irgendwo festgelegt? Denn wenn ich im VC++ 2008 mit dem Cursor über <em>size_t</em> fahre, kommt ein Tipp mit <em>typedef unsigned int size_t</em>. Aber die Deklaration konnte ich nicht finden, ist sie in einer Bibliothek? Oder ist das vom Compiler selbst abhängig?</p>
<p>hustbaer schrieb:</p>
<blockquote>
<blockquote>
<p>aber es gibt 64bit compiler, die ein 32bit int definiert haben.</p>
</blockquote>
<p>MSVC zum <strong>bleistift</strong></p>
</blockquote>
<p>Ist mir erst jetzt aufgefallen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541236</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Jul 2008 19:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 19:43:17 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber ist das nicht irgendwo festgelegt?</p>
</blockquote>
<p>leider nein.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Oder ist das vom Compiler selbst abhängig?</p>
</blockquote>
<p>ja. jeder compiler darf selber entscheiden, wie er das realisiert. er muss nur die c/c++-regeln aus dem standard einhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541245</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 19:43:17 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 21:18:30 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p>size_t sollte nicht so groß wie int sondern wie der systemübliche zeiger sein. das ist auf den meisten systemen haarspalterei, aber es gibt 64bit compiler, die ein 32bit int definiert haben.</p>
</blockquote>
<p>Gibt es denn 64 bit compiler, bei denen int 64 bit hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541284</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 04 Jul 2008 21:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 21:24:19 GMT]]></title><description><![CDATA[<p>wie ich schon schrieb: der gcc nutzt meines wissen nach int mit 64bit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541286</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 21:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 21:26:25 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p>wie ich schon schrieb: der gcc nutzt meines wissen nach int mit 64bit.</p>
</blockquote>
<p>nein <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="🙂"
    /><br />
gcc mit x64 target:</p>
<pre><code>int 32bit
long 64bit
long long 64bit
</code></pre>
<p>cl mit x64 target:</p>
<pre><code>int 32bit
long 32bit
long long 64bit
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1541288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541288</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Fri, 04 Jul 2008 21:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Fri, 04 Jul 2008 21:31:04 GMT]]></title><description><![CDATA[<p>danke für die korrektur. ich habe keinen gcc für 64bit, sondern las nur, dass dieser erhebliche probleme bereitet und ints mit 64bit veranschlagt. aber das ist offensichtlich falsch. daher ziehe ich meine kommentare zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541289</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Fri, 04 Jul 2008 21:31:04 GMT</pubDate></item><item><title><![CDATA[Reply to Performance vs. Design on Sat, 05 Jul 2008 16:03:33 GMT]]></title><description><![CDATA[<p>Hi OptimzerC,</p>
<p>meiner Meinung nach sind das keine Kriterien über die du dir Gedanken machen<br />
mußt. Wenn es allerdings wirklich so zeitkritisch ist, würde ich eine<br />
Funktion:</p>
<pre><code class="language-cpp">const std::vector&lt;int&gt;&amp; getStates() const;
</code></pre>
<p>machen und dann so drüber iterieren:</p>
<pre><code class="language-cpp">const std::vector&lt;int&gt;&amp; vec = obj-&gt;getStates();
std::vector&lt;int&gt;::const_iterator end = vec.end();
for(std::vector&lt;int&gt;::const_iterator it = vec.begin(); it!=end; ++it){
int j = *it;
}
</code></pre>
<p>Das ist glaube ich einen Zeiger-Zugriff schneller als die Adressierung per<br />
Index. Lasse mich aber auch gerne vom Gegenteil überzeugen ^^<br />
Alternativ kannst du natürlich auch zwei Methoden in deiner Klasse zur<br />
Verfügung stellen:</p>
<pre><code class="language-cpp">typedef std::vector&lt;int&gt;::const_iterator const_iterator;

const_iterator begin() const;
const_iterator end() const;
</code></pre>
<pre><code class="language-cpp">States::const_iterator end = obj-&gt;end();
for(States::const_iterator it = obj-&gt;begin(); it!=end; ++it){
int j = *it;
}
</code></pre>
<p>EDIT: obj-&gt;end() vor for-Schleife gezogen.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541402</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 05 Jul 2008 16:03:33 GMT</pubDate></item></channel></rss>