<?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[Wie teuer ist virtual?]]></title><description><![CDATA[<p>Guten Tag.<br />
Ich frage mich, ob es akzeptabel ist trotz dem Streben nach größtmöglicher Performance beinahe exzessiv Polymorphie auszunutzen.<br />
Konkret handelt es sich um ein Framework welches bereits schnell ist, aber<br />
es soll hoch performant werden und dennoch<br />
möglichst flexibel<br />
Der letze Grund bewegt mich und mein kleines Team viel &quot;Virtualität&quot; <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="😉"
    /> auszunutzen und wir sind bereit das mit <strong>minimalen</strong> Geschwindigkeitseinbußen zu bezahlen.<br />
Könnt ihr das anraten?<br />
Ich bedanke mich für jede qualifizierte Hilfestellung!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245480/wie-teuer-ist-virtual</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 15:38:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245480.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jul 2009 16:57:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 16:57:02 GMT]]></title><description><![CDATA[<p>Guten Tag.<br />
Ich frage mich, ob es akzeptabel ist trotz dem Streben nach größtmöglicher Performance beinahe exzessiv Polymorphie auszunutzen.<br />
Konkret handelt es sich um ein Framework welches bereits schnell ist, aber<br />
es soll hoch performant werden und dennoch<br />
möglichst flexibel<br />
Der letze Grund bewegt mich und mein kleines Team viel &quot;Virtualität&quot; <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="😉"
    /> auszunutzen und wir sind bereit das mit <strong>minimalen</strong> Geschwindigkeitseinbußen zu bezahlen.<br />
Könnt ihr das anraten?<br />
Ich bedanke mich für jede qualifizierte Hilfestellung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742950</guid><dc:creator><![CDATA[Pfreak]]></dc:creator><pubDate>Tue, 14 Jul 2009 16:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 17:05:19 GMT]]></title><description><![CDATA[<p>Nachzulesen in &quot;Effective C++&quot; oder &quot;More Effective C++&quot;, keine Ahnung mehr in welchem von beiden.</p>
<p>edit: Im letzteren z.B. in 4.9: Verstehe die Kosten virtueller Funktionen ...</p>
<p>Im Allgemeinen sollte man die beiden Buecher sowieso verinnerlicht haben. <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/1742954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742954</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 14 Jul 2009 17:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 17:01:12 GMT]]></title><description><![CDATA[<blockquote>
<p>exzessiv</p>
</blockquote>
<p>Nein!</p>
<p>exzessiv ist bei jedem Sprachmittel falsch. virtual fällt bei großen Funktionen nicht ins Gewicht, bei kleineren Funktionen wirds aber nervig, weil der Compiler dann die vielen kleinen aber nützliche optimierungen nicht durchführen kann.</p>
<p>Flexibilität kann man auch durch Templates erreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742955</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 14 Jul 2009 17:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 17:47:21 GMT]]></title><description><![CDATA[<p>Dass virtual viel &quot;teurer&quot; sei als non-virtual, ist Quatsch. Der Unterschied ist längst nicht so groß, wie es das im Fall inline gegen non-inline sein kann.</p>
<p>Siehe <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf" rel="nofollow">C++ Performance</a></p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742993</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 14 Jul 2009 17:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 18:15:12 GMT]]></title><description><![CDATA[<p>Was wäre denn die Alternative? Ein switch-case-Konstrukt? Das virtual ist doch nur ein Sprung in einer Tabelle, kein Nachteil ggü. einem selber gebastleten Typ-Entscheider. Benutze virtual dann, wenn du es brauchst. Wenn du dir darüber sorgen machst, mach kein C++ sondern C...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742999</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Tue, 14 Jul 2009 18:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 19:54:12 GMT]]></title><description><![CDATA[<p>Pfreak schrieb:</p>
<blockquote>
<p>Konkret handelt es sich um ein Framework welches bereits schnell ist, aber<br />
es soll hoch performant werden und dennoch<br />
möglichst flexibel</p>
</blockquote>
<p>Achwasdunichtsagst.<br />
Das nennst du konkret? Das nenne ich Gefasel, ohne einen Fetzen Information.</p>
<blockquote>
<p>Der letze Grund bewegt mich und mein kleines Team viel &quot;Virtualität&quot; <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="😉"
    /> auszunutzen und wir sind bereit das mit <strong>minimalen</strong> Geschwindigkeitseinbußen zu bezahlen.</p>
</blockquote>
<p>Weitergefaselt.</p>
<blockquote>
<p>Könnt ihr das anraten?<br />
Ich bedanke mich für jede qualifizierte Hilfestellung!</p>
</blockquote>
<p>Ich würde anraten &quot;qualifizierte&quot; Fragen zu stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743032</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Tue, 14 Jul 2009 20:01:10 GMT]]></title><description><![CDATA[<p>hihihi. Unser hustebaer! <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Nunja ... ein konkretes Beispiel fände ich nun auch nicht schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743065</guid><dc:creator><![CDATA[Lachnummer!]]></dc:creator><pubDate>Tue, 14 Jul 2009 20:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Wed, 15 Jul 2009 08:08:18 GMT]]></title><description><![CDATA[<p>Virtual ist bei Mehrfachvererbung teurer als bei bei Einfachvererbung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743256</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 15 Jul 2009 08:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Wed, 15 Jul 2009 08:43:25 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Virtual ist bei Mehrfachvererbung teurer als bei bei Einfachvererbung.</p>
</blockquote>
<p>Sicher? Ich bin mir nämlich fast sicher dass du da was verwechselst... (virtuelle Vererbung vs. Mehrfachvererbung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743288</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 15 Jul 2009 08:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Wed, 15 Jul 2009 09:03:51 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>knivil schrieb:</p>
<blockquote>
<p>Virtual ist bei Mehrfachvererbung teurer als bei bei Einfachvererbung.</p>
</blockquote>
<p>Sicher? Ich bin mir nämlich fast sicher dass du da was verwechselst... (virtuelle Vererbung vs. Mehrfachvererbung).</p>
</blockquote>
<p>Bei Mehrfachvererbung muß beim Aufruf virtueller Funktionen üblicherweise der this-Pointer angepaßt werden; die meisten Compiler behelfen sich hierfür mit Thunks. (Ob das freilich relevante Mehrkosten sind, sei dahingestellt.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743307</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 15 Jul 2009 09:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Wed, 15 Jul 2009 23:46:05 GMT]]></title><description><![CDATA[<p>Pfreak schrieb:</p>
<blockquote>
<p>Guten Tag.<br />
Ich frage mich, ob es akzeptabel ist trotz dem Streben nach größtmöglicher Performance beinahe exzessiv Polymorphie auszunutzen.<br />
Konkret handelt es sich um ein Framework welches bereits schnell ist, aber<br />
es soll hoch performant werden und dennoch<br />
möglichst flexibel<br />
Der letze Grund bewegt mich und mein kleines Team viel &quot;Virtualität&quot; <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="😉"
    /> auszunutzen und wir sind bereit das mit <strong>minimalen</strong> Geschwindigkeitseinbußen zu bezahlen.<br />
Könnt ihr das anraten?<br />
Ich bedanke mich für jede qualifizierte Hilfestellung!</p>
</blockquote>
<p>Du kannst (in der Regel) nicht alles haben, maximale Performanz und maximale Flexibilität. Wenn es ein Framework ist, sollen andere es verwenden, was häufig ja auch bedeutet, dass man ableiten möchte oder muss. Aus meiner Sicht ist dies oft wichtiger als Performanz. In Frameworks mache ich darum oft alle Methoden (außer private natürlich) virtual. Solche Klassen sollen ableitungsfreundlich sein!</p>
<p>Ich würde sagen, finde heraus, ob Performanz <strong>wirklich</strong> ein Thema ist (meist ist es das nämlich nicht), zahle an den <strong>notwendigen</strong> Stellen und legen ansonsten eher Wert auf Flexibiliät.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743863</guid><dc:creator><![CDATA[Grautvornix]]></dc:creator><pubDate>Wed, 15 Jul 2009 23:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Thu, 16 Jul 2009 08:41:08 GMT]]></title><description><![CDATA[<p>Wenn du sehr viele verschiedene Objekte hast mit sehr vielen virtuellen Methoden, dann sind die Sprungtabellen für die virtuellen Methoden für alle diese Klassen zusammen recht groß und wenn diese recht groß sind, aber häufig verwendet werden bleiben sie im Cache was dazu führen kann, dass diese Sprungtabellen und deine Daten (auf diese du auch ständig zugreifst) sich gegenseitig aus dem Cache verdrängen (natürlich nur, wenn nicht genug Platz vorhanden ist).<br />
Natürlich befindet sich auch der Code von häufig aufgerufenen und den zuletzt aufgerufenen Funktionen dort.</p>
<p>Aber da hilft nur eines: profilen. Und selbst dann muss man sich noch überlegen wieviel Cache man sich mindestens zugestehen will. Nicht jede CPU hat 6MB L2 Cache, wie die (besseren) Core 2s.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743970</guid><dc:creator><![CDATA[Kenner der Hardware]]></dc:creator><pubDate>Thu, 16 Jul 2009 08:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wie teuer ist virtual? on Thu, 16 Jul 2009 08:52:32 GMT]]></title><description><![CDATA[<p>Kenner der Hardware schrieb:</p>
<blockquote>
<p>Wenn du sehr viele verschiedene Objekte hast mit sehr vielen virtuellen Methoden, dann sind die Sprungtabellen für die virtuellen Methoden für alle diese Klassen zusammen recht groß und wenn diese recht groß sind, aber häufig verwendet werden bleiben sie im Cache was dazu führen kann, dass diese Sprungtabellen und deine Daten (auf diese du auch ständig zugreifst) sich gegenseitig aus dem Cache verdrängen (natürlich nur, wenn nicht genug Platz vorhanden ist).<br />
Natürlich befindet sich auch der Code von häufig aufgerufenen und den zuletzt aufgerufenen Funktionen dort.</p>
<p>Aber da hilft nur eines: profilen. Und selbst dann muss man sich noch überlegen wieviel Cache man sich mindestens zugestehen will. Nicht jede CPU hat 6MB L2 Cache, wie die (besseren) Core 2s.</p>
</blockquote>
<p>Ich finde nicht, dass man sich bei Design-Entscheidungen auf diese niedrige Ebene hinunter begeben sollte. Erstens, weil's nicht unbedingt stimmt: Wie virtuelle Methoden letztlich &quot;aufgelöst&quot; werden, ist ein Implementierungs-Detail und hängt von tausend Umständen ab. Zweitens, weil sich Hardware ständig ändert: Was heute ein großer Cache ist, kann in ein paar Monaten winzig sein.</p>
<p>Es ist sinnlos, sich beim Design eines Frameworks (oder auch eines einfachen Programms) über solche Dinge den Kopf zu zerbrechen.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743978</guid><dc:creator><![CDATA[Grautvornix]]></dc:creator><pubDate>Thu, 16 Jul 2009 08:52:32 GMT</pubDate></item></channel></rss>