Was die jeweiligen Sprachstandards betrifft, so bietet C dynamische Speicherzuweisung nur durch die malloc()
Familie, während in C++ die häufigste Form der Zuweisung durch ::operator new()
. Das C-ähnliche malloc ist auch in C++ verfügbar, und viele "Baby's first allocator"-Beispiele verwenden es als Kern-Allokationsfunktion, aber ich bin neugierig, wie zeitgenössische Compiler den eigentlichen Produktionsoperator-new implementieren.
Ist es nur eine dünne Hülle um malloc()
oder ist es aufgrund des etwas anderen Speicherzuweisungsverhaltens eines typischen C++-Programms im Vergleich zu einem typischen C-Programm grundlegend anders implementiert?
[ Edit : Ich glaube, der Hauptunterschied wird gewöhnlich wie folgt beschrieben: Ein C-Programm hat weniger, größere, langlebige Zuweisungen, während ein C++-Programm viele, kleine, kurzlebige Zuweisungen hat. Sie können sich gerne melden, wenn das falsch ist, aber es klingt, als würde man davon profitieren, dies zu berücksichtigen].
Für einen Compiler wie GCC wäre es einfach, nur eine einzige Kernzuweisungsimplementierung zu haben und diese für alle relevanten Sprachen zu verwenden, daher frage ich mich, ob es Unterschiede in den Details gibt, die versuchen, die resultierende Zuweisungsleistung in jeder Sprache zu optimieren.
Aktualisierung: Vielen Dank für die vielen tollen Antworten! Es sieht so aus, als ob in GCC dies vollständig gelöst ist durch ptmalloc und dass MSVC auch malloc
im Kern. Weiß jemand, wie die MSVC-Malloc implementiert ist?