C vs C++
Re: C vs C++
lies dir mal diesen Thread durch ("Einen String umdrehen")
<a href="http://www.pl-forum.de/cgi-bin/UltraBoa ... 4&Post=250" target="_blank"><!--auto-->http://www.pl-forum.de/cgi-bin/UltraBoa ... <!--auto-->
im 4.-letzten Posting von unten ist eine ASCII Grafik das die Laufzeiten darstellt.
Es werden drei Versionen (C++ mit inline/template; C++ Version eines C Proggies; C Programm) ein und der selben Funktion (String umdrehen) verglichen.
Vielleicht nicht allgemeingültig aber für diesen einen Anwendungsfall doch ganz überraschend, dass die C++ Version mit inline/templates laufzeittechnisch ein "stabileres" Verhalten zeigte als die reine C Version.
<a href="http://www.pl-forum.de/cgi-bin/UltraBoa ... 4&Post=250" target="_blank"><!--auto-->http://www.pl-forum.de/cgi-bin/UltraBoa ... <!--auto-->
im 4.-letzten Posting von unten ist eine ASCII Grafik das die Laufzeiten darstellt.
Es werden drei Versionen (C++ mit inline/template; C++ Version eines C Proggies; C Programm) ein und der selben Funktion (String umdrehen) verglichen.
Vielleicht nicht allgemeingültig aber für diesen einen Anwendungsfall doch ganz überraschend, dass die C++ Version mit inline/templates laufzeittechnisch ein "stabileres" Verhalten zeigte als die reine C Version.
Re: C vs C++
Hi!
> ist ein Programm, das in reinem C geschrieben ist, schneller, als ein äquivalentes C++ Programm?
Der C-Standard schreibt keine bestimmte Geschwindigkeit vor. Der C++-Standard im Moment auch nicht. *eg* Die Frage ist daher schon falsch gestellt. Welches Programm schneller ist, hängt vom konkreten Programm und dem konkreten Compiler ab.
Cheers,
GNU/Wolfgang
PS: Mein Lieblingslink zu C++: <a href="http://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3/" target="_blank"><!--auto-->http://www.progsoc.uts.edu.au/~geldridg ... <!--auto-->
> ist ein Programm, das in reinem C geschrieben ist, schneller, als ein äquivalentes C++ Programm?
Der C-Standard schreibt keine bestimmte Geschwindigkeit vor. Der C++-Standard im Moment auch nicht. *eg* Die Frage ist daher schon falsch gestellt. Welches Programm schneller ist, hängt vom konkreten Programm und dem konkreten Compiler ab.
Cheers,
GNU/Wolfgang
PS: Mein Lieblingslink zu C++: <a href="http://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3/" target="_blank"><!--auto-->http://www.progsoc.uts.edu.au/~geldridg ... <!--auto-->
Re: C vs C++
Hi,
wie das Beispiels der Strings zeigt, kann C++ effizienter sein als C. Dahinter steckt natürlich das Prinzip der Lazy Evaluation, aber es gibt natürlich keinen Grund, das in C nicht genauso zu machen.
Es gibt zweifellos einen gewissen Overhead bei C++, insbesondere bei virtuellen Funktionen und bei "verborgenen" Konstruktor- und Destruktoraufrufen von temporären Objekten. Das dürfte zwischen 0 und 5% Zeit kosten.
Ganz übel kann es aussehen, wenn man Exceptions verwendet. Das kann nach Scott Meyers um die 10% kosten. Es scheint wenig empfehlenswert sein, überhaupt Exceptions einzusetzen.
Wenn man überhaupt keine Klassen verwendet, ist die Performance von C und C++ exakt gleich.
Gruß,
hjb
wie das Beispiels der Strings zeigt, kann C++ effizienter sein als C. Dahinter steckt natürlich das Prinzip der Lazy Evaluation, aber es gibt natürlich keinen Grund, das in C nicht genauso zu machen.
Es gibt zweifellos einen gewissen Overhead bei C++, insbesondere bei virtuellen Funktionen und bei "verborgenen" Konstruktor- und Destruktoraufrufen von temporären Objekten. Das dürfte zwischen 0 und 5% Zeit kosten.
Ganz übel kann es aussehen, wenn man Exceptions verwendet. Das kann nach Scott Meyers um die 10% kosten. Es scheint wenig empfehlenswert sein, überhaupt Exceptions einzusetzen.
Wenn man überhaupt keine Klassen verwendet, ist die Performance von C und C++ exakt gleich.
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
Re: C vs C++
Ich wollte eigentlich wissen, ob es evtl. schneller ist, keine Klassen, sondern Strukturen zu verwenden, und statdessen die Methoden, die eigentlich in der Klasse wären auszulagern.
Re: C vs C++
@axeljaeger
Du wirst jetzt bestimmt den Kopf schütteln, aber es stimmt:
Eine Struktur (struct) ist auch so etwas wie eine Klasse (class). In beidem kannst du Methoden und Attribute public, private und protected deklarieren.
Der einzige Unterschied zwischen struct und class zeigt sich beim Vererben.
Wenn du du eine class vererbst, so wird standardmässig private vererbt.
Wenn du einen struct vererbst, wir standardmässig public vererbt. Das ist alles.
Du kannst also in structs auch Methoden schreiben, ehrlich!!!!
Deshalb ist es unerheblich, ob du Klassen oder Strukturen verwendest. Du gewinnst kein bisschen Geschwindigkeit dadurch.
Gruss Michael
Du wirst jetzt bestimmt den Kopf schütteln, aber es stimmt:
Eine Struktur (struct) ist auch so etwas wie eine Klasse (class). In beidem kannst du Methoden und Attribute public, private und protected deklarieren.
Der einzige Unterschied zwischen struct und class zeigt sich beim Vererben.
Wenn du du eine class vererbst, so wird standardmässig private vererbt.
Wenn du einen struct vererbst, wir standardmässig public vererbt. Das ist alles.
Du kannst also in structs auch Methoden schreiben, ehrlich!!!!
Deshalb ist es unerheblich, ob du Klassen oder Strukturen verwendest. Du gewinnst kein bisschen Geschwindigkeit dadurch.
Gruss Michael
Re: C vs C++
Was ist dann der Unterschied zwischen C++ und C, wenn man einfach ein kleines Skript schreibt, das "struct" durch "class" ersetzt? Ich hab mal gehört, das einzig wirklich neue an C++ sind Konstruktoren. Das Thema hatte mich nur interessiert, weil es mal in der Chip zu Evolution hies: "Das Programm läuft angenehm schnell, das es in großen Teilen in C geschreiben ist"
Re: C vs C++
In solchen Zeitschriften aka "Chip" wird größtenteils nicht zwischen C/C++ unterschieden, sondern veralgemeinert.
Re: C vs C++
die haben also nicht zwischen C und C++ unterschieden, sondern zwischen anderen Programmiersprachen und C/C++, wie etwa Java oder ähnliches?
Re: C vs C++
C++ hat natürlich noch einige andere Zusätze zu "C" z.B. das man auch Referenzen anstelle von Zeigern nutzen kann.
Entscheidend ist aber vielmehr das der Compiler auch eine genaue Typenprüfung vornehmen kann, was bei OO unter C (mit generischen Zeigern) nicht machbar ist.
In Sachen Performance nehmen sich aber C und C++ nichts (soweit man keine Klassen verwendet).
Inwieweit der höhere "Komfort" bei C++-Klassen einen Performanceverlust rechtfertigt, kann Wolfgang am besten erklären ;-P
Entscheidend ist aber vielmehr das der Compiler auch eine genaue Typenprüfung vornehmen kann, was bei OO unter C (mit generischen Zeigern) nicht machbar ist.
In Sachen Performance nehmen sich aber C und C++ nichts (soweit man keine Klassen verwendet).
Inwieweit der höhere "Komfort" bei C++-Klassen einen Performanceverlust rechtfertigt, kann Wolfgang am besten erklären ;-P