Warum werden in der C++-Speicherverwaltung die Begriffe „automatisch“ und „dynamisch“ den Begriffen „Stack“ und „Heap“ vorgezogen?

Lesezeit: 4 Minuten

Warum werden in der C Speicherverwaltung die Begriffe „automatisch und „dynamisch
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.

  • 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


1646969409 540 Warum werden in der C Speicherverwaltung die Begriffe „automatisch und „dynamisch
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.

  • Auch gut zu wissen: Nicht alle Systeme verwenden einen „Stack“ für nicht-rekursive Funktionen. Außerdem: Es ist möglich, dynamische Objekte auf dem “Stapel” zu erstellen (glaube ich boost::variant does Das).

    – Muhende Ente

    13. Februar 2012 um 18:30 Uhr

  • Welche anderen kostenlosen Shops gibt es? Eigentlich, in welchem ​​​​Sinne ist kostenlos speichern frei und Stapelspeicher ist nicht frei?

    – Immer lernen

    2. Januar 2020 um 17:21 Uhr

  • „Freier Speicher“ bedeutet einfach einen „Speicher freier (Speicher-)Ressourcen, die zugewiesen werden könnten“. Also jede systemspezifische Möglichkeit, Speicher zuzuweisen, wie z mmap oder sbrkwürde zählen.

    – Nutzlos

    2. Januar 2020 um 21:31 Uhr


  • Abgesehen davon, dass es sich um ein optionales Implementierungsdetail handelt, ist Stapelspeicher einerseits normaler Speicher, der von einem dieser systemspezifischen Allokatoren zurückgebucht wird (außer wenn er nicht wie bei SPARC ist oder wenn er nicht existiert) – und andererseits andererseits eine Art und Weise, mit der (Auf-)Zuweisung dieses Speichers umzugehen.

    – Nutzlos

    2. Januar 2020 um 21:34 Uhr

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.

Warum werden in der C Speicherverwaltung die Begriffe „automatisch und „dynamisch
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.

  • Entschuldigung, dass ich Ihre vorherige Antwort abgelehnt habe. Mir wurde klar, dass die Frage mehrdeutig war. +1

    – Luchian Grigore

    7. Februar 2012 um 18:58 Uhr

1646969410 624 Warum werden in der C Speicherverwaltung die Begriffe „automatisch und „dynamisch
Jannat Arora

Stack und Heap bringen implementierungsbezogene Konzepte ins Bild, während die Begriffe “automatisch” und “dynamisch” allgemeiner sind

  • Entschuldigung, dass ich Ihre vorherige Antwort abgelehnt habe. Mir wurde klar, dass die Frage mehrdeutig war. +1

    – Luchian Grigore

    7. Februar 2012 um 18:58 Uhr

989740cookie-checkWarum werden in der C++-Speicherverwaltung die Begriffe „automatisch“ und „dynamisch“ den Begriffen „Stack“ und „Heap“ vorgezogen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy