Optimieren C++-Compiler mittlerweile so gut wie C-Compiler?



  • Ich habe gehört, dass C++-Compiler den Code nicht so gut optimieren können wie C-Compiler, aufgrund der viel höheren Komplexität von C++, ist das richtig?



  • Nein.



  • Schneller C++-Code sieht aus wie C, damit der Compiler optimieren kann.



  • OptimizerSizer schrieb:

    Ich habe gehört, dass C++-Compiler den Code nicht so gut optimieren können wie C-Compiler, aufgrund der viel höheren Komplexität von C++, ist das richtig?

    Nein. Sie können mindestens genau so gut optimieren.

    Wegen der viel höheren Komplexität von C++ brauchen sie viel länger zum compilieren. Viel viel viel länger übrigens. Das war in den späten Jahren des vergangenen Jahrhunderts sogar ein fieses Problem. Nicht selten musste ich bei fremden Projekten, die ich zu reparieren hatte, bei eine kleinsten Fehlerbereinigung ein Viertelstündchen warten. Dann hieß es erstmal, die Compilezeit zu beschleunigen, bevor man sich um die Fehler kümmert. Das ist aber jetzt um, so ein I7 rotzt dermaßen viel Code durch, da greifen die precompiled headers bei Windows und make bei linux schon ausreichend, selbst wenn die C++-Entwickler die "all.hpp" inkludieren.

    Und nun zum Erschreckenden: C++ ist potentiell schneller.
    Zum Beispiel möchte man virtuelle Funktionen basteln. Das ist sowohl in C als auch in C++ ebensoselten nötig. In C++ gibt es ein Sprachmittel dafür. Da kann und wird der C++-Compiler Code dafür erzeugen, der supi genau auf den Prozessor passt. In C müßte man es auf einem standardisierten Wege flach stricken, der es dem Compiler erlaubt, das Muster zu erkennen und in passende Assembler-Befehle zu übersetzen. Mangels Bedarf noch nicht da, fürchte ich.
    Zum Beispiel möchte man schlimme seltene Fehler hochleiten (Datei nicht existent). Auf manchen Architekturen zahlt man in C++ dafür im Nicht-Fehler-Fall keinen einzigen Takt. Das müßte man in C mit if im Hauptcode hochleiten.
    Also je mehr Sprachmittel mit wirksamer Bedeutung die Sprache hat, desto mehr kann der Compiler bereits auf höchster Ebene Zaubertricks anwenden, die ein späterer Optimierer niemals sehen würde. Darum mach C++ unglaublich schnellen Code: Für fast jeden Jokus gibt es ein Sprachmittel.

    Du kannst davon ausgehen, daß C++ Dein Programm fast sofort schneller macht als wie wenn es mit C Geschrieben wäre. Und wenn das Programm hinreichen groß ist, dann auch kleiner im Vergleich zu einem C-Programm mit selber Wirkung, was nicht deutlich langsamer sein soll.

    Ähm, zugegebenermaßen wenn der Programmierer C++ fast vollständig beherrscht.

    Das mit dem Bißchen Speed ist aber nicht der Grund für C++. Und das soll auch nicht die Weise sein, wie man C++ benutzt. Wer Spaß daran hat, das letzte Bißchem Speed rauszuholen, der soll es gerne tun. Ich bin auch so einer, aber das ist nur Hobby.

    C++ ist RAII!

    Wenn man C++ richtig benutzt also mit RAII immer im Kopf, passieren 90% der üblichen Fehler nicht mehr. Wenn man noch "Effecive C++ Programming" liest, ist man auf 98%, und C++ ist ja kostenlos da, man muss als Anwender nicht aus Geldmangel bei C bleiben.

    Naja, es ist schon ätzend, daß C++ so viele Sprachmittel hat. Neulich führte mich ein Ausflug zu Forth. Geile Sache das! Keine störende Syntax, sondern man schreibt einfach intuitiv das hin, was man meint und es passt. Aber da habe ich nur sehr einfache Programme gebraucht und keine Ressourcen binden müssen. Ich vermute, Forth läßt sich nicht mit RAII betreiben und bleibt damit nur für triviale Anwendungen vertretbar.



  • In C kann man auch nur so Sachen wie Linux oder Gimp mit abwickeln. Ja ist schon schade, dass man mit C nicht so viel machen kann. C ist eben für alles größere völlig ungeeignet.

    Nicht falsch verstehen, C++ hat tolle Features und wenn man fast vollständig C++ beherrscht kann man ganz tolle und effektive Sachen damit machen. Nur ist C++ leider so komplex, dass kaum einer sich die Mühe macht und ein paar Jahre investiert um C++ fast vollständig zu lernen. Wenn man C++ aber nicht sehr gut beherrscht, dann kann man ganz schnell extrem ineffektive Software schreiben.



  • volkard schrieb:

    Also je mehr Sprachmittel mit wirksamer Bedeutung die Sprache hat, desto mehr kann der Compiler bereits auf höchster Ebene Zaubertricks anwenden, die ein späterer Optimierer niemals sehen würde. Darum mach C++ unglaublich schnellen Code: Für fast jeden Jokus gibt es ein Sprachmittel.

    Naja, das ist etwas sehr optimistisch. Die modernsten Sachen wie Exception Handling sind vielleicht 15 Jahre her, für die wirklich neuen Dinge gibt es keine Sprachunterstützung.

    Die Compilerbauer wissen das und bieten Intrinsics dafür an, die sind aber auch von C aus zu nutzen. Wer Speed will, muss darauf zurückgreifen. Aber dann kann man sich _alle_ Features aus C++ in C selber zusammenbauen.

    C++ ist vielleicht komplexer und komfortabler, aber schneller ... das ist ein Märchen.


Anmelden zum Antworten