C++ schneller als andere Sprachen?



  • warum sagen viele immer das C++ schneller ist als andere Compilersprachen wie z.b. Pascal? Es wird doch beides in Maschinencode übersetzt und es gibt ja nur einen Maschinencode der immer gleich schnell ist oO



  • weil c++ coder alles mit template meta programming machen. da rechnet der compiler alles aus und das resultat braucht zur laufzeit 0 cpu-zyklen.
    🙂



  • Von schnell zu langsam: ASM > C ~ C++ > Java (grobe Abstufung)

    Hier kannst Du dir einige Benchmarks anschauen:
    http://shootout.alioth.debian.org/



  • Erhard Henkes schrieb:

    Von schnell zu langsam: ASM > C > C++ > Java (grobe Abstufung)

    und der zeitaufwand für die programmierung ist es genau umgekehrt.
    🙂



  • Mag sein, das ist aber nicht die Frage. C und C++ sind in etwa gleich schnell (habe ich korrigiert).



  • Erhard Henkes schrieb:

    Mag sein, das ist aber nicht die Frage. C und C++ sind in etwa gleich schnell (habe ich korrigiert).

    C ist etwas besser:
    http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=gpp&lang2=gcc
    🙂



  • Jesuit schrieb:

    es gibt ja nur einen Maschinencode der immer gleich schnell ist oO

    Die Art und Anordnung der Maschinenbefehle spielt vielleicht, außer dem Fakt dass es sich um Maschinencode handelt, auch eine kleine unbedeutende Rolle 🙄 (bitte sei ein Troll)



  • Pascal ist halt scheiße und deshalb wurde da kein Geld und Wissen reininvenstiert um die Erzeugung von Maschienencode zu optimieren.

    Prinzipiell können natürlich alle kompilierten Sprachen gleich schnell sein. Oftmals wird es dann aber zwangsweise Unterschiede geben durch die Spezifikation (z.B. die Anordnung von 2-dimensionalen Arrays im Speicher ist bei C und Pascal verschieden, hier könnte man also leicht zwei Beispiele schreiben wo jeweils der andere besser abschneidet).



  • fricky schrieb:

    Erhard Henkes schrieb:

    Mag sein, das ist aber nicht die Frage. C und C++ sind in etwa gleich schnell (habe ich korrigiert).

    C ist etwas besser:
    http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=gpp&lang2=gcc
    🙂

    Jeder solcher Vergleich ist per default sinnlos als Sprachvergleich. Es scheint aber, dass es einigen C-Fanatikern nicht in den Kopf geht, dass nicht jedes kleine Programm jedes einzelne Sprachfeature nutzen muss und diese überflüssige Nutzung ungeeigneter Sprachmittel natürlich der Performance nicht zuträglich sein wird. Da beide Sprachen (C und C++) grundsätzlich auf dem selben Maschinenmodell beruhen und für jedes Sprachmittel eine offensichtliche und effiziente (wenn auch nicht unbedingt optimale) Implementierung möglich ist, gibt es keinen Grund für fundamentale Unterschiede hinsichtlich Geschwindigkeit, Speicherverbrauch etc.
    Ja, das heißt eben, dass diese gemessen Unterschiede auf die Unfähigkeit der Programmierer zurückzuführen sind.

    Der gezeigte Benchmark beweist etwas - aber was das ist, bleibt der Phantasie überlassen.



  • 30 Seiten Thread oder closed? Das ist hier die Frage.



  • bevor's geclosed wird... ich bin für c 🙂



  • C rockt... 😉

    kommt es nicht auch auf den compiler an... welche optimierungen er vor nimmt?



  • Es kommt auf den Programmierer an.



  • HeyIhrNoobs schrieb:

    Es kommt auf den Programmierer an.

    Da hast du auch nicht unrecht. Aber wenn du einen Programmierer nimmst der in jeder der erwähnten Sprachen etwa gleich gut ist, ist die grobe Angabe ASM > C > C++ > Java nicht so abwägig.

    Bei dem Vergleich von C zu C++ stütze ich mich auf etwas aus der C++ Bibel (Die C++ Programmiersprache), auch wenn ich mir jetzt nicht sicher bin welche Auflage. Dort war eine grobe Angabe was C++ Features in etwa an Leistung kosten dürfen (Exceptions...). Auch wenn durchaus manche C++ Konstrukte zu schnelleren Code führen können. Dennoch, rein Leistungstechnisch ist meine Schätzung das C gegenüber C++ bei gleicher Codequalität (unter Nutzung von Sprachfeatures) ca. 10% schneller ist.

    Und C/C++ haben den Vorteil das die Optimierer dort schon Jahrzehnte herumschrauben... xD

    cu André



  • camper schrieb:

    Es scheint aber, dass es einigen C-Fanatikern nicht in den Kopf geht, dass nicht jedes kleine Programm jedes einzelne Sprachfeature nutzen muss und diese überflüssige Nutzung ungeeigneter Sprachmittel natürlich der Performance nicht zuträglich sein wird. Da beide Sprachen (C und C++) grundsätzlich auf dem selben Maschinenmodell beruhen und für jedes Sprachmittel eine offensichtliche und effiziente (wenn auch nicht unbedingt optimale) Implementierung möglich ist, gibt es keinen Grund für fundamentale Unterschiede hinsichtlich Geschwindigkeit, Speicherverbrauch etc.

    die unterschiede sind zwar marginal, aber summieren sich auf. z.b. verwendet der c-coder gern char* mit zeichenketten. wer mit c++ rummacht, der nimmt lieber std::string. wo bei einem 'char *hallo = "hallo";' einfach eine adresse in den speicher geschrieben wird, führt 'std::string hallo = "hallo";' eine vielzahl von schritten aus. man erkauft sich höhere flexibilität für speed und speicherverbrauch. klar, wenn der c++ programmierer von seinem c++ nur den C subset nutzen würde, wären beide gleich schnell. aber dann wäre C++ auch überflüssig.
    🙂



  • asc schrieb:

    HeyIhrNoobs schrieb:

    Es kommt auf den Programmierer an.

    Da hast du auch nicht unrecht. Aber wenn du einen Programmierer nimmst der in jeder der erwähnten Sprachen etwa gleich gut ist, ist die grobe Angabe ASM > C > C++ > Java nicht so abwägig.

    Die Annahme, dass ein Programmierer ein größeres Projekt fertigstellt und es darin nichts mehr zu optimieren gäbe, außer eine andere Sprache zu verwenden, ist aber abwägig. OK, ich könnte es vielleicht hin bekommen, aber dann müsste ich alle Libs selber schreiben und dazu hab ich jetzt auch keien Lust.



  • fricky schrieb:

    die unterschiede sind zwar marginal, aber summieren sich auf. z.b. verwendet der c-coder gern char* mit zeichenketten. wer mit c++ rummacht, der nimmt lieber std::string. wo bei einem 'char *hallo = "hallo";' einfach eine adresse in den speicher geschrieben wird, führt 'std::string hallo = "hallo";' eine vielzahl von schritten aus. man erkauft sich höhere flexibilität für speed und speicherverbrauch. klar, wenn der c++ programmierer von seinem c++ nur den C subset nutzen würde, wären beide gleich schnell. aber dann wäre C++ auch überflüssig.
    🙂

    Die Geschwindigkeitsunterschiede sind zwar messbar, aber heute mit Sicherheit nicht mehr fühlbar. 😉



  • sri schrieb:

    fricky schrieb:

    die unterschiede sind zwar marginal, aber summieren sich auf. z.b. verwendet der c-coder gern char* mit zeichenketten. wer mit c++ rummacht, der nimmt lieber std::string. wo bei einem 'char *hallo = "hallo";' einfach eine adresse in den speicher geschrieben wird, führt 'std::string hallo = "hallo";' eine vielzahl von schritten aus. man erkauft sich höhere flexibilität für speed und speicherverbrauch. klar, wenn der c++ programmierer von seinem c++ nur den C subset nutzen würde, wären beide gleich schnell. aber dann wäre C++ auch überflüssig.
    🙂

    Die Geschwindigkeitsunterschiede sind zwar messbar, aber heute mit Sicherheit nicht mehr fühlbar. 😉

    Für dich vielleicht!!

    Ich spüre sogar den Unterschied zwischen mov eax,0 und test eax,eax!!!



  • fricky schrieb:

    camper schrieb:

    Es scheint aber, dass es einigen C-Fanatikern nicht in den Kopf geht, dass nicht jedes kleine Programm jedes einzelne Sprachfeature nutzen muss und diese überflüssige Nutzung ungeeigneter Sprachmittel natürlich der Performance nicht zuträglich sein wird. Da beide Sprachen (C und C++) grundsätzlich auf dem selben Maschinenmodell beruhen und für jedes Sprachmittel eine offensichtliche und effiziente (wenn auch nicht unbedingt optimale) Implementierung möglich ist, gibt es keinen Grund für fundamentale Unterschiede hinsichtlich Geschwindigkeit, Speicherverbrauch etc.

    die unterschiede sind zwar marginal, aber summieren sich auf. z.b. verwendet der c-coder gern char* mit zeichenketten. wer mit c++ rummacht, der nimmt lieber std::string. wo bei einem 'char *hallo = "hallo";' einfach eine adresse in den speicher geschrieben wird, führt 'std::string hallo = "hallo";' eine vielzahl von schritten aus. man erkauft sich höhere flexibilität für speed und speicherverbrauch.

    andererseits kannst du mit c++ dinge wie z.b. http://www.flipcode.com/archives/Faster_Vector_Math_Using_Templates.shtml machen die kaum in c zu machen sind, klar koennte man alle formeln auch per hand ausschreiben in c, aber dann waeren bibliotheken unnuetz. mit template math kann man hingegen dem compiler sehr helfen optimierten code zu schreiben.



  • Asm-Hacker schrieb:

    Ich spüre sogar den Unterschied zwischen mov eax,0 und test eax,eax!!!

    troll


Anmelden zum Antworten