<?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[Highperformance C++]]></title><description><![CDATA[<p>Angenommen ich stehe vor der Aufgabe einen Gerätetreiber für ein Embedded-System schreiben zu müssen. Es kommt vor allem auf Performance und sparsamen Ressourcenverbrauch an. Die meisten Codeoptimierungen lass ich ganz gerne den Compiler machen, ich möchte vor allem schon bei dem Design auf optimale Performance achten.</p>
<p>Nun meine Fragen dazu:</p>
<p>Was kosten virtuelle Funktionen wirklich(vtable und co.)?</p>
<p>Was kosten Exceptions wirklich und wann sollte man sie einsetzen? Java Programmierer benutzen Exceptions für jede Art der Fehlerbehandlung, mir kommen aber Exceptions zu &quot;klotzig&quot; vor. Wann sind C-like Fehlerrückgabewerte von Funktionen den Exceptions vorzuziehen? Ist das überhaupt C++-like?</p>
<p>Bringt die expliziete Verwendung von register heutzutage noch Vorteile?</p>
<p>Wie performant sind die C++ Standardfunktionen? Befinde ich mich noch im C++ Standard, wenn ich die C Funktionen wie memset, strcat, etc. verwende?</p>
<p>Danke für Eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123400/highperformance-c</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 13:11:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123400.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Oct 2005 14:19:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 14:19:37 GMT]]></title><description><![CDATA[<p>Angenommen ich stehe vor der Aufgabe einen Gerätetreiber für ein Embedded-System schreiben zu müssen. Es kommt vor allem auf Performance und sparsamen Ressourcenverbrauch an. Die meisten Codeoptimierungen lass ich ganz gerne den Compiler machen, ich möchte vor allem schon bei dem Design auf optimale Performance achten.</p>
<p>Nun meine Fragen dazu:</p>
<p>Was kosten virtuelle Funktionen wirklich(vtable und co.)?</p>
<p>Was kosten Exceptions wirklich und wann sollte man sie einsetzen? Java Programmierer benutzen Exceptions für jede Art der Fehlerbehandlung, mir kommen aber Exceptions zu &quot;klotzig&quot; vor. Wann sind C-like Fehlerrückgabewerte von Funktionen den Exceptions vorzuziehen? Ist das überhaupt C++-like?</p>
<p>Bringt die expliziete Verwendung von register heutzutage noch Vorteile?</p>
<p>Wie performant sind die C++ Standardfunktionen? Befinde ich mich noch im C++ Standard, wenn ich die C Funktionen wie memset, strcat, etc. verwende?</p>
<p>Danke für Eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893475</guid><dc:creator><![CDATA[null]]></dc:creator><pubDate>Sun, 16 Oct 2005 14:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 14:47:33 GMT]]></title><description><![CDATA[<p>Hi,</p>
<blockquote>
<p>Bringt die expliziete Verwendung von register heutzutage noch Vorteile?</p>
</blockquote>
<p>Das sagt dir die Doku deines Compilers.<br />
Meistens heißt es da: &quot;Dieses Schlüsselwort wird ignoriert.&quot;<br />
Bei Embedded kann es anders aussehen. Schaden wird es nicht.</p>
<blockquote>
<p>Wie performant sind die C++ Standardfunktionen? Befinde ich mich noch im C++ Standard, wenn ich die C Funktionen wie memset, strcat, etc. verwende?</p>
</blockquote>
<p>Ja.<br />
Da die Standardfunktionen meist von den selben Leuten, wie der Compiler<br />
stammt, ist die Chance groß, dass sie wissen, mit welchen Tricks sie sie performant gestalten. Oft übernimmt der Compiler schon von sich aus Funktionen wir malloc, memset etc. (eingebaut)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893493</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 16 Oct 2005 14:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 14:52:27 GMT]]></title><description><![CDATA[<p>null schrieb:</p>
<blockquote>
<p>Was kosten virtuelle Funktionen wirklich(vtable und co.)?</p>
</blockquote>
<p>Verglichen mit einfachen calls sind virtuelle calls relativ teuer. Aber mit der heutigen Hardware würde ich sagen, dass man da keinen extremen Unterschied bemerken würde (ausser man hat vtable-calls in verschachtelten Schleifen und viele Iterationen).</p>
<blockquote>
<p>Was kosten Exceptions wirklich und wann sollte man sie einsetzen? Java Programmierer benutzen Exceptions für jede Art der Fehlerbehandlung, mir kommen aber Exceptions zu &quot;klotzig&quot; vor. Wann sind C-like Fehlerrückgabewerte von Funktionen den Exceptions vorzuziehen? Ist das überhaupt C++-like?</p>
</blockquote>
<p>Im Prinzip ist der Ganze Exception-Mechanismus auch nur ein strukturiertes goto; nur müssen hier die Sprungmarken in die Aufgerufene Funktion &quot;mitgenommen&quot; werden. Im Normalfall reicht es, wenn du Exceptions nur dann verwendest, wenn wirklich etwas Aussergewöhnliches passiert. Sonst würde ich bei Rückgabewerten bleiben.</p>
<blockquote>
<p>Bringt die expliziete Verwendung von register heutzutage noch Vorteile?</p>
</blockquote>
<p>Eher nicht. Visual C++ 8.0 zum Beispiel berücksichtigt das nicht mehr (baut aber selbstständing SSE2-Instruktionen und solches Zeug ein). Soweit ich das weiss, gibt es dieses Schlüsselwort in C++ sowieso nur der C-Kompatibilität wegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893496</guid><dc:creator><![CDATA[User6457585668679987]]></dc:creator><pubDate>Sun, 16 Oct 2005 14:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 15:05:18 GMT]]></title><description><![CDATA[<p>Wie teuer Exceptions sind ist maßgeblich vom Compiler abhängig. Compiler wie der VC 6.0 haben eine recht teure Exceptionimplementation. Sowohl im Punkte Geschwindigkeit (einbußen selbst wenn keine Exceptions geworfen werden) als auch in der Programmgröße. Moderne gccs verwenden hingegen eine Exception-Implementation, die laufzeittechnisch nur wenn tatsächlich eine Exception geworfen wird etwas kostet.</p>
<p>Letztlich hilft hier aber nur messen, da das immer auch vom konkreten Programm abhängig ist (wie oft werden Exceptions geworfen, wieviel Stack-Unwinding findet statt, wie sieht die alternative Fehlerbehandlungsstrategie aus usw.).<br />
Ähnliches gilt auch für virtuelle Funktionen. Ein virtueller Methodenaufruf ist zwar teurer als ein nicht-virtueller. Aber meistens entfällt beim virtuellen Aufruf dafür auch eine if- bzw. switch-Anweisung.</p>
<p>Guckst du auch hier:<br />
<a href="http://www.eventhelix.com/RealtimeMantra/Basics/ComparingCPPAndCPerformance.htm" rel="nofollow">http://www.eventhelix.com/RealtimeMantra/Basics/ComparingCPPAndCPerformance.htm</a><br />
<a href="http://www.eventhelix.com/RealtimeMantra/Basics/ComparingCPPAndCPerformance2.htm" rel="nofollow">http://www.eventhelix.com/RealtimeMantra/Basics/ComparingCPPAndCPerformance2.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/893503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893503</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 16 Oct 2005 15:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 15:54:08 GMT]]></title><description><![CDATA[<p>hab ale fragen ausführlich beantwortet, aber dieses forum hat die antworten wiedermal weggeworfen. interressiert es eigentlich jemanden, wenn das forum verbuggt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893544</guid><dc:creator><![CDATA[volkard2]]></dc:creator><pubDate>Sun, 16 Oct 2005 15:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 15:55:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30712">@Hume</a>: Hast du da auch Daten zu MSVC 7.1 bzw. 8.0?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893546</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 16 Oct 2005 15:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Highperformance C++ on Sun, 16 Oct 2005 19:00:19 GMT]]></title><description><![CDATA[<p>null schrieb:</p>
<blockquote>
<p>Was kosten virtuelle Funktionen wirklich(vtable und co.)?</p>
</blockquote>
<p>nur einen eindirekten jsr/call und die übergabe des this-pointers als zusätzlichen versteckten funktionsparameter.</p>
<p>auf den meisten 32-bit-cpus kosten indirekte calls nur 2-3 taktzyklen mehr. der this-pointer wird normalerweise in einem prozessorregister übergeben. wenn man bedenkt, daß ein funktionsaufruf auch noch die parameterübergabe, das retten und wiederherstellen von prozessorregistern, das anlegen von speicher für die lokalen variablen und das aufräumen des stacks kostet, dann fällt das kaum ins gewicht.der zugriff auf objektvariablen indirekt über den this-pointer geht auf den meisten prozessoren sogar schneller als der zugriff auf eine globale variable.</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Ein virtueller Methodenaufruf ist zwar teurer als ein nicht-virtueller. Aber meistens entfällt beim virtuellen Aufruf dafür auch eine if- bzw. switch-Anweisung.</p>
</blockquote>
<p>sehe ich genauso. und wenn man daten nicht über objektvariablen an eine element-funktion übergibt, dann muß man sich mit der übergabe eines zeigers auf eine datenstruktur behelfen und das ist doppelt langsamer: erstens wird die dann nicht in einem prozessorregister übergeben und zweitens ist der zugriff auf die felder auch wesentlich teurer.</p>
<p>wenn man es nicht in c++ macht, dann muß man es mit mehr code-aufwand in c schreiben. und das ist meist auch nicht effizienter.</p>
<p>was exceptions angeht, die sollten eigentlich nicht mehr rechenzeit in anspruch nehmen als die übliche fehlerbehandlung mit if's. der exception-mechanismus fuktioniert wie ein longjump und benötigt nur rechenzeit, wenn eine exception ausgelöst wird. es wird etwas mehr stack-speicher benötigt, weil catch, ähnlich wie setjump, die cpu-register auf den stack rettet. aber eigentlich machen exceptions das programm kürzer, weil man sich die if-orgien der herkömmlichen fehlerbehandlung spart. ob man exceptions verwendet hängt nicht von den effizenzanforderungen ab sondern von der architektur des programms. bei kleinen und einfachen programmen hieße exceptions zu verwenden halt mit kanonen auf spatzen zu schießen. das der exception-mechanismus effizenz-mäßig in verruf geraten ist, liegt daran, das viele c++-biliotheken unzählige plausibilitätsprüfungen durchführen um im fehlerfall eine exception auszulösen. da sind es aber nicht die exceptions sondern die plausibilitätsprüfungen, die rechenzeit verschlingen.</p>
<p>ein nachteil von c++ ist jedoch, daß der objektorientierte programmierstil zu ausladendem code verleitet. es ist in c++ ja so bequem, inline-funktionen zu schreiben <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="😃"
    /> da muß man sich im griff haben. außerdem sind viele c++-bibliotheken ziemlich fett.</p>
<p>fazit: man kann c++ praktisch bedenkenlos auch für zeit/speicherkritische anwendungen einsetzen, muß aber aufpassen, was für bibliotheken man verwendet.<br />
und mit inlines und templates sollte man sich auch zurückhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893703</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Sun, 16 Oct 2005 19:00:19 GMT</pubDate></item></channel></rss>