
Luchian Grigore
Im Zusammenhang mit vielen Fragen und Antworten zu SO habe ich gelernt, dass es besser ist, auf Objekte zu verweisen, deren Lebensdauer so verwaltet wird, dass sie sich im automatischen Speicher befinden, anstatt im Stapel.
Außerdem sollten dynamisch zugewiesene Objekte nicht als auf dem Heap, sondern im dynamischen Speicher gespeichert bezeichnet werden.
Ich verstehe, dass es automatische, dynamische und statische Speicherung gibt, aber ich habe den Unterschied zwischen automatischem Stapel und dynamischem Heap nie wirklich verstanden. Warum werden erstere bevorzugt?
Ich frage nicht, was Stack/Heap bedeutet oder wie die Speicherverwaltung funktioniert. Ich frage, warum die Begriffe automatischer/dynamischer Speicher den Begriffen Stack/Heap vorgezogen werden.

Nutzlos
Automatisch sagt mir etwas über die Lebensdauer eines Objekts: nämlich, dass es gebunden ist automatisch zum umschließenden Geltungsbereich und werden vernichtet automatisch wenn dieser Bereich beendet wird.
Dynamisch sagt mir, dass die Lebensdauer eines Objekts nicht kontrolliert wird automatisch vom Compiler, sondern unter meiner direkten Kontrolle.
Stapel ist ein überladener Name für einen Containertyp und für das zugehörige populäre Anweisungszeigerprotokoll, das von Common unterstützt wird call
und ret
Anweisungen. Es sagt mir nichts über die Lebensdauer eines Objekts aus, außer durch eine historische Assoziation mit der Lebensdauer von Objekten in C aufgrund gängiger Stack-Frame-Konventionen. Beachten Sie auch, dass es sich bei einigen Implementierungen um Thread-lokale Speicherung handelt auf dem Stapel eines Threads, ist aber nicht auf den Umfang einer einzelnen Funktion beschränkt.
Haufen ist wiederum ein überladener Name, der entweder einen Typ eines sortierten Behälters oder ein Verwaltungssystem für freie Lager anzeigt. Das ist nicht der einzige free store auf allen Systemen verfügbar, und es sagt mir auch nichts Konkretes über die Lebensdauer eines zugewiesenen Objekts aus new
.
Die meisten Implementierungen verwenden einen Stack, um Objekte mit automatischer Speicherung zu sichern. Dies wird vom Standard nicht gefordert, funktioniert aber heutzutage auf den meisten CPU-Architekturen gut.
Implementierungen verwenden verschiedene Strategien, um Objekte mit dynamischer Speicherdauer zu sichern. Ich bin mir nicht sicher Haufen ist der beste Weg, um zu beschreiben, was moderne Speicherzuordner verwenden, aber das scheint der “historische” Begriff dafür zu sein.
Automatische/dynamische Speicherung sind also Begriffe, die der Standard verwendet, um die (“abstrakte”) Objektlebensdauer zu klassifizieren. Dies sind die richtigen Begriffe, die Sie verwenden sollten, wenn Sie über Objekte sprechen möchten, wie der Standard sie beschreibt.
Stacks und Heaps sind (“konkrete”) Implementierungstechniken, die verwendet werden können, um sie zu unterstützen. Die Verwendung dieser Begriffe ist weniger korrekt, es sei denn, Sie sprechen von einer bestimmten Implementierung.

Asaf
Die automatischen/dynamischen Speicherbedingungen sind einfach deshalb vorzuziehen, weil dies der Standard erfordert. Stack/Heap sind implementierungsbasiert und können theoretisch auch auf andere Weise implementiert werden.
Technisch gesehen handelt es sich bei der Stack/Heap-Zuweisung um Implementierungsdetails, während automatische/dynamische Speicherung die allgemeineren Begriffe sind. Der Standard selbst schreibt nicht vor, dass der Zuordner einen Stack/Heap verwenden muss. Daher ist automatisch/dynamisch der richtigere Begriff, obwohl ich persönlich diese Unterscheidung etwas zu pedantisch finde.
Die Begriffe “statische Speicherdauer”, “automatische Speicherdauer” und “dynamische Speicherdauer” erscheinen im C++-Standard.
Die Begriffe „Stack“ und „Heap“ beziehen sich auf Funktionen in der Standardbibliothek (stack<>
, make_heap()
, push_heap()
etc.), die wenig mit der Speicherdauer zu tun haben.

Jannat Arora
Stack und Heap bringen implementierungsbezogene Konzepte ins Bild, während die Begriffe “automatisch” und “dynamisch” allgemeiner sind
9897400cookie-checkWarum werden in der C++-Speicherverwaltung die Begriffe „automatisch“ und „dynamisch“ den Begriffen „Stack“ und „Heap“ vorgezogen?yes
Ich nehme an, das Folgende beantwortet Ihre Frage nicht? stackoverflow.com/questions/408670/stack-static-and-heap-in-c
– NPE
7. Februar 2012 um 18:34 Uhr
@aix tut es nicht. Oder zumindest sagt es nicht, wie ein Begriff dem anderen vorgezogen wird, oder den Unterschied.
– Luchian Grigore
7. Februar 2012 um 18:36 Uhr
mögliches Duplikat von Proper Stack and Heap Usage in C++?
– NPE
7. Februar 2012 um 18:37 Uhr
Ich dachte immer, es liegt daran, dass der Standard nicht vorschreibt, dass die automatische Speicherdauer unbedingt wie ein Stapel implementiert werden muss.
– jrok
7. Februar 2012 um 18:38 Uhr
@LuchianGrigore: Bis zur Bearbeitung war mir überhaupt nicht klar, dass es bei der Frage um Terminologie ging und um nichts anderes. Den Kommentaren/Antworten nach zu urteilen, war es auch anderen überhaupt nicht klar.
– NPE
7. Februar 2012 um 18:42 Uhr