Ich frage mich, ob es sich mit modernen Compilern und ihren Optimierungen noch lohnt, einige kritische Codes in C statt in C++ zu schreiben, um sie schneller zu machen.
nein. halten sie es lesbar. wenn ihr team c++ oder c bevorzugt, bevorzugen sie das - vor allem, wenn es bereits im produktionscode funktioniert (schreiben sie es nicht ohne sehr gute gründe um).
Ich weiß, dass C++ zu Leistungseinbußen führen kann, wenn Klassen kopiert werden, während sie als Referenz übergeben werden können.
dann das Kopieren und Zuweisen verbieten
oder wenn Klassen automatisch durch den Compiler erstellt werden, typischerweise mit überladenen Operatoren und vielen anderen ähnlichen Fällen
Könnten Sie das näher erläutern? Wenn Sie sich auf Vorlagen beziehen, verursachen diese keine zusätzlichen Kosten zur Laufzeit (obwohl sie zu zusätzlichen exportierten Symbolen führen können, was eine größere Binärdatei zur Folge hat). Tatsächlich kann die Verwendung einer Vorlagenmethode die Leistung verbessern, wenn (zum Beispiel) sonst eine Konvertierung erforderlich wäre.
Aber lohnt es sich für einen guten C++-Entwickler, der weiß, wie er all das vermeiden kann, trotzdem, Code in C zu schreiben, um die Leistung zu verbessern?
Meiner Erfahrung nach kann ein erfahrener C++-Entwickler ein schnelleres, besser wartbares Programm erstellen.
Sie müssen bei den Sprachfunktionen, die Sie verwenden (und nicht verwenden), selektiv vorgehen. wenn Sie die C++-Funktionen auf die in C verfügbaren herunterbrechen (z. B. Ausnahmen entfernen, virtuelle Funktionsaufrufe, rtti), dann haben Sie einen guten Start. wenn Sie lernen, Vorlagen, Metaprogrammierung, Optimierungstechniken zu verwenden, Typ-Aliasing zu vermeiden (was in C immer schwieriger oder ausführlicher wird) usw., dann sollten Sie gleichauf oder schneller als C sein - mit einem Programm, das leichter zu warten ist (da Sie mit C++ vertraut sind).
Wenn Sie sich mit den Funktionen von C++ wohlfühlen, verwenden Sie C++. Es hat viele Funktionen (von denen viele mit Blick auf Geschwindigkeit/Kosten hinzugefügt wurden) und kann so schnell wie C (oder schneller) geschrieben werden.
mit Schablonen und Metaprogrammierung, Sie könnte viele Laufzeitvariablen in Kompilierzeitkonstanten umwandeln, um außergewöhnliche Vorteile zu erzielen. Das geht manchmal weit in den Bereich der Mikrooptimierung hinein.