Ich weiß, dass ich ziemlich oft gehört habe, dass C typischerweise einen Leistungsvorteil gegenüber C ++ hat. Ich habe nicht wirklich darüber nachgedacht, bis mir klar wurde, dass MSVC nicht einmal den neuesten Standard von C zu unterstützen scheint, aber der neueste, der es unterstützt, C99 (soweit ich weiß).
Ich hatte vor, eine Bibliothek mit Code zu schreiben, der in OpenGL gerendert werden soll, damit ich ihn wiederverwenden kann. Ich hatte vor, die Bibliothek in C zu schreiben, da jede Leistungssteigerung in Bezug auf Grafiken willkommen ist.
Aber wäre es das wirklich wert? Der Code, der die Bibliothek verwendet, wird wahrscheinlich in C ++ geschrieben, und ich bevorzuge generell den Code in C ++.
Wenn es jedoch auch nur einen kleinen Leistungsunterschied geben würde, würde ich wahrscheinlich mit C gehen.
Es kann auch angemerkt werden, dass diese Bibliothek etwas wäre, das ich für die Arbeit unter Windows / OS X / Linux machen würde, und ich würde wahrscheinlich alles nativ kompilieren (MSVC für Windows, Clang oder GCC für OS X und GCC für Linux). .oder möglicherweise Intels Compiler für alles).
Ich habe mich umgesehen und einige Benchmarks und dergleichen gefunden, aber alles, was ich gesehen habe, hat sich eher mit GCC als mit MSVC und Clang befasst. Außerdem erwähnen die Benchmarks nicht die Standards der verwendeten Sprachen. Hat jemand irgendwelche Gedanken dazu?
BEARBEITEN:Ich wollte nur nach ein paar Jahren mehr Erfahrung meinen Standpunkt zu dieser Frage teilen. Am Ende habe ich das Projekt geschrieben, für das ich diese Frage in C ++ gestellt habe. Ich habe ein anderes Projekt ungefähr zur selben Zeit in C gestartet, als wir versucht haben, eine möglichst geringe Performance zu erzielen. Vor ein paar Monaten hatte ich den Punkt erreicht, an dem ich wirklich Karten brauchte und mich weiterentwickelte String-Manipulation. Ich kannte die Fähigkeiten dafür in der C ++ - Standardbibliothek und kam schließlich zu dem Schluss, dass diese Strukturen in der Standardbibliothek wahrscheinlich besser abschneiden und stabiler sind als Maps und Strings, die ich in angemessener Zeit in C implementieren könnte. Die Anforderung, in C verlinkbar zu sein, wurde leicht erfüllt, indem eine C-Schnittstelle zum C ++ - Code geschrieben wurde, was mit undurchsichtigen Typen schnell erledigt wurde. Das Umschreiben der Bibliothek in C ++ schien viel schneller zu gehen als beim Schreiben in C und war weniger anfällig für Fehler, insbesondere für Speicherverluste. Ich konnte auch die Standardbibliotheks-Threading-Bibliothek verwenden, die viel einfacher war als die Verwendung plattformspezifischer Implementierungen. Letztendlich, glaube ich, hat das Schreiben der Bibliothek in C ++ zu großen Vorteilen bei möglicherweise geringen Leistungskosten geführt. Ich habe die C ++ - Version noch nicht verglichen, aber ich glaube, dass es sogar möglich ist, dass ich durch die Verwendung von Standard-Bibliotheksdatenstrukturen eine gewisse Leistung erzielt habe, als ich sie geschrieben habe. Ich glaube, dass das Schreiben der Bibliothek in C ++ zu großen Vorteilen bei möglicherweise geringen Leistungskosten geführt hat. Ich habe die C ++ - Version noch nicht verglichen, aber ich glaube, dass es sogar möglich ist, dass ich durch die Verwendung von Standard-Bibliotheksdatenstrukturen eine gewisse Leistung erzielt habe, als ich sie geschrieben habe. Ich glaube, dass das Schreiben der Bibliothek in C ++ zu großen Vorteilen bei möglicherweise geringen Leistungskosten geführt hat. Ich habe die C ++ - Version noch nicht verglichen, aber ich glaube, dass es sogar möglich ist, dass ich durch die Verwendung von Standard-Bibliotheksdatenstrukturen eine gewisse Leistung erzielt habe, als ich sie geschrieben habe.