<?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[Lohnt sich EBO wirklich?]]></title><description><![CDATA[<p>Wirklich, lohnt sich Empty Base Optimisation?</p>
<p>Das Musterbeispiel sieht doch immer so aus:</p>
<pre><code class="language-cpp">template &lt;typename T, typename Alloc&gt;
class vector : Alloc {
  T *data, *data_end, *storage_end;
  Alloc&amp; get_alloc() { return static_cast&lt;Alloc&amp;&gt;(*this); }
};
</code></pre>
<p>Wenn Alloc leer ist, ist hier alles bestens, weil dann ist <code>data</code> an erster Stelle und das will man aus Performanzgründen. Sobald Alloc aber nicht mehr leer ist, wird data nach hinten verschoben und das hat dann negative Auswirkungen auf die Performanz.</p>
<p>Es gibt zwar Hacks, aber IMHO gibt es keinen standardkonformen Weg, mit EBO zu garantieren, dass Alloc am Ende der Memberliste steht. Bringt EBO deshalb in der Praxis etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315378/lohnt-sich-ebo-wirklich</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 01:50:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315378.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 Mar 2013 22:42:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 22:42:31 GMT]]></title><description><![CDATA[<p>Wirklich, lohnt sich Empty Base Optimisation?</p>
<p>Das Musterbeispiel sieht doch immer so aus:</p>
<pre><code class="language-cpp">template &lt;typename T, typename Alloc&gt;
class vector : Alloc {
  T *data, *data_end, *storage_end;
  Alloc&amp; get_alloc() { return static_cast&lt;Alloc&amp;&gt;(*this); }
};
</code></pre>
<p>Wenn Alloc leer ist, ist hier alles bestens, weil dann ist <code>data</code> an erster Stelle und das will man aus Performanzgründen. Sobald Alloc aber nicht mehr leer ist, wird data nach hinten verschoben und das hat dann negative Auswirkungen auf die Performanz.</p>
<p>Es gibt zwar Hacks, aber IMHO gibt es keinen standardkonformen Weg, mit EBO zu garantieren, dass Alloc am Ende der Memberliste steht. Bringt EBO deshalb in der Praxis etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311332</guid><dc:creator><![CDATA[eber]]></dc:creator><pubDate>Sun, 31 Mar 2013 22:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 22:58:08 GMT]]></title><description><![CDATA[<p>Inwiefern hat es Auswirkungen auf die Performance, wenn <code>data</code> weiter hinten steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311337</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 31 Mar 2013 22:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 23:00:40 GMT]]></title><description><![CDATA[<p>Es braucht keinen Platz! Das ist die Motivation.</p>
<p>eber schrieb:</p>
<blockquote>
<p>Es gibt zwar Hacks, aber IMHO gibt es keinen standardkonformen Weg, mit EBO zu garantieren, dass Alloc am Ende der Memberliste steht. Bringt EBO deshalb in der Praxis etwas?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wo willst du Alloc denn nun haben und warum, obwohl es doch gar nicht &quot;da&quot; ist?</p>
<p>eber schrieb:</p>
<blockquote>
<p>Bringt EBO deshalb in der Praxis etwas?</p>
</blockquote>
<p>Und wie! Es macht dass du all die schicken durchdesignten Bibliotheken nutzen kannst, ohne dass jeder popelige Smartpointer eine sizeof von &gt; 1000 hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311338</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 31 Mar 2013 23:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 23:00:49 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Inwiefern hat es Auswirkungen auf die Performance, wenn <code>data</code> weiter hinten steht?</p>
</blockquote>
<p>vec[n]<br />
ist, falls data vorne steht, *(&amp;vec + n)<br />
ansonsten *(&amp;vec + offsetof(vec.data) + n)<br />
also eine Addition mehr.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Es geht um den Fall, dass Alloc doch da ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311339</guid><dc:creator><![CDATA[eber]]></dc:creator><pubDate>Sun, 31 Mar 2013 23:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 23:27:50 GMT]]></title><description><![CDATA[<p>eber schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Es geht um den Fall, dass Alloc doch da ist.</p>
</blockquote>
<p>Dann greift EBO nicht und die Frage ist hinfällig.</p>
<p>Oder ist deine Frage, ob EBO etwas bringt, wenn EBO nicht greift? Antwort: 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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311344</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 31 Mar 2013 23:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Sun, 31 Mar 2013 23:33:09 GMT]]></title><description><![CDATA[<p>SeppJ: Dadurch, dass man EBO auszunutzen versucht, hat man in dem Fall einen <strong>Nachteil</strong>, den man nicht hätte, wenn man den Allokator als Member statt Basisklasse nähme.</p>
<p>Die Frage: Lohnt sich EBO wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311346</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 31 Mar 2013 23:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Mon, 01 Apr 2013 00:13:32 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, dass deine Frage sich speziell nur auf Allokatoren im Stil der STL bezieht, da du auf andere Anwendungen der EBO (z.B. policy based design) gar nicht eingehst:</p>
<p>Allokatoren sind (Prä-C++11) in der Regel leer. Wer sich nicht daran hält, weiß wohl (hoffentlich) was er da tut. Dein vermuteter Performancenachteil ist daher nur hypothetisch. Selbst wenn dieser Fall einträte, wäre der Nachteil winzig. Dafür ist der mögliche Gewinn riesig!</p>
<p>Wenn du dir wirklich Sorgen machst, kannst du mitteln Templatemagie auch zwei unterschiedliche Versionen schreiben, einmal mit Vererbung, einmal mit Komposition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311349</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 01 Apr 2013 00:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Mon, 01 Apr 2013 01:58:44 GMT]]></title><description><![CDATA[<p>eber schrieb:</p>
<blockquote>
<p>ipsec schrieb:</p>
<blockquote>
<p>Inwiefern hat es Auswirkungen auf die Performance, wenn <code>data</code> weiter hinten steht?</p>
</blockquote>
<p>vec[n]<br />
ist, falls data vorne steht, *(&amp;vec + n)<br />
ansonsten *(&amp;vec + offsetof(vec.data) + n)<br />
also eine Addition mehr.</p>
</blockquote>
<p>Nope, ist es nicht. Da fehlt eine Indirektion, der vector enthält lediglich einen Pointer auf den Speicher. Abgesehen davon, verfügen die meisten CPUs wohl über entsprechende Addressierungsmodi, sodass das offsetof da kaum bis praktisch bzw. sogar tatsächlich gar keinen Unterschied macht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311353</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 01 Apr 2013 01:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Lohnt sich EBO wirklich? on Mon, 01 Apr 2013 06:53:52 GMT]]></title><description><![CDATA[<pre><code>//vec[n] =&gt;
*((*(&amp;vec))+n)
//vs
*((*(&amp;vec+4))+n)
//und der compiler macht daraus in beiden Fällen
*(*datapointerpos+n)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2311362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311362</guid><dc:creator><![CDATA[richtiger code]]></dc:creator><pubDate>Mon, 01 Apr 2013 06:53:52 GMT</pubDate></item></channel></rss>