Dynamische Zuweisungen mit new/delete
sollen im Free-Store stattfinden ,
während malloc/free
Operationen den Heap verwenden .
Ich würde gerne wissen, ob es in der Praxis einen tatsächlichen Unterschied gibt.
Unterscheiden Compiler zwischen den beiden Begriffen? ( Free Store und Heap , nicht new/malloc
)
quelle
Für C ++ ist der Unterschied zwischen dem freien Speicher und dem Heap rein konzeptionell geworden. Wie ein Glas zum Sammeln von Fehlern und eines zum Sammeln von Keksen. Einer ist so beschriftet, der andere anders. Diese Bezeichnung soll den Punkt nach Hause fahren, an dem Sie NIEMALS "
new
" und "delete
" mit "malloc
", "realloc
" oder "" mischen.free
" (oder Bit-Level-Sets für diese Angelegenheit) .Während der Interviews ist es gut zu sagen, dass "
new
unddelete
den freien Speichermalloc
undfree
den Heap verwendennew
unddelete
den Konstruktor bzw. Destruktor aufrufenmalloc
undfree
dies nicht tun". Sie werden jedoch häufig hören, dass sich die Speichersegmente tatsächlich im selben Bereich befinden. Dies kann jedoch compilerspezifisch sein, dh es ist möglich, dass beide unterschiedliche Speicherbereiche als Pools festlegen können (nicht sicher, warum dies der Fall ist). obwohl).quelle
Die Antwort von Mike Koval deckt die Theorie ziemlich gut ab. In der Praxis handelt es sich jedoch fast immer um denselben Speicherbereich. In den meisten Fällen werden
new
Aufrufe angezeigt, wenn Sie sich mit der Implementierung des Compilers befassenmalloc()
.Mit anderen Worten: Aus Sicht der Maschine sind Heap und Free Store dasselbe. Die Unterscheidung besteht innerhalb des Compilers.
Um die Sache noch verwirrender zu machen, haben wir vor dem Aufkommen von C ++ "Heap" gesagt, was "Free Store" heißt.
quelle
Der Begriff "Heap" kann sich auch auf eine bestimmte Datenstruktur beziehen, aber im Kontext der C ++ - Malloc-, Free-, New- und Delete-Operationen werden die Begriffe "Heap" und "Free Store" mehr oder weniger austauschbar verwendet.
quelle
Heap und Free-Store sollten nicht interoperabel sein. In eingeschränkten Kontexten wie in AVR 8-Bit-Mikrocontrollern mit c ++ 11 Standard Library können sie nicht einmal im selben Programm verwendet werden. Free Store und Heap weisen ihre Zuweisungen im selben Speicherplatz vor und überschreiben sich gegenseitig Strukturen und Daten. In diesem Zusammenhang unterscheidet sich Free Store von Heap und ist nicht mit Heap kompatibel, da die "new / delete free store library" einfacher (und schneller) als die "Malloc / free / realloc / calloc-Heapbibliothek" ist und somit enorme Speicherauslastungsgewinne für die Eingebetteter C ++ - Programmierer (in einem Kontext, in dem Sie nur 512 Byte RAM haben).
Siehe 8-Bit-Standardbibliothek c ++ 11/14 unter https://github.com/ambroise-leclerc/ETL/tree/master/libstd
quelle
Ich erinnere mich nicht an den Standard, in dem das Wort Heap jemals erwähnt wurde, außer in den Beschreibungen von Heap-Funktionen wie
push_heap
et al. Alle dynamischen Zuordnungen werden im Free-Store durchgeführt.quelle
Free Store ist ein Pool von nicht zugewiesenem Heapspeicher, der einem Programm zugewiesen wird, das vom Programm für die dynamische Zuweisung während der Programmausführung verwendet wird. Jedes Programm verfügt über einen Pool nicht zugewiesenen Heapspeichers, den es während der Ausführung verwenden kann. Dieser Pool verfügbaren Speichers wird als freier Speicher des Programms bezeichnet. Der zugewiesene freie Speicher ist unbenannt.
quelle