Unterschied zwischen Stapel und Haufen

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 9 Kann 2024
Anonim
Achtung Gefahr! Hausstaub oder krebserregende Stoffe? Das ABC der Staubklassen und Sauger L, M und H
Video: Achtung Gefahr! Hausstaub oder krebserregende Stoffe? Das ABC der Staubklassen und Sauger L, M und H

Inhalt


Stack und Heap sind die Speichersegmente, die bei Speicherzuweisungstechniken verwendet werden. Der Hauptunterschied zwischen Stapel und Heap besteht darin, dass der Stapel eine lineare und sequenzielle Zuordnung des Speichers umfasst, der für die statische Speicherzuordnung verwendet wird, während der Heap als Speicherpool fungiert, der den Speicher zufällig zuordnet (dynamische Speicherzuordnung).

Geschwindigkeit ist der Hauptparameter, der Stapel und Haufen unterscheidet; Ein Stapel ist bedeutend schneller als ein Haufen.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

VergleichsbasisStapelHaufen
BasicDer Speicher wird in (LIFO) Last in first out zugewiesen.Der Speicher wird in zufälliger Reihenfolge zugewiesen.
Zuordnung und FreigabeAutomatischHandbuch
KostenGeringer, wenigerMehr
ImplementierungHartEinfach
AufrufenAUF)O (1)
ProblemSpeichermangelSpeicherfragmentierung
BezugsortAusgezeichnetAngemessene
FlexibilitätFeste Größe und ist nicht flexibelGrößenänderung ist möglich
ZugriffszeitSchnellerLangsamer


Definition von Stapel

Die Stapelzuordnung folgt einer LIFO-Strategie (Last in first out), um den Speicher mithilfe von Push- und Pop-Operationen den Prozessen zuzuordnen. Jeder Block im Speicher hat eine feste Größe, die nicht erweitert oder verkleinert werden kann. Auf den letzten Eintrag im Stapel kann jederzeit zugegriffen werden. Der Stapel verwendet einen zusammenhängenden Speicher, in dem ein als Stapelbasis benannter Zeiger auf den ersten Eintrag des Stapels und ein als Stapelanfang benannter Zeiger auf den letzten Eintrag des Stapels verweist.

Stack unterstützt auch Funktionsaufrufe. Ein Funktionsaufruf kann eine Sammlung der Stapeleinträge enthalten, der sogenannte Stapelrahmen. Ein anderer Name des Stack-Frames ist der Aktivierungsdatensatz im Con des Compilers, in dem die zum Zeitpunkt der Programmkompilierung verwendeten Daten gespeichert sind. Immer wenn eine Funktion aufgerufen wird, wird der Stapelrahmen in den Stapel geschoben.


Ein Stack-Frame besteht entweder aus Adressen oder aus Werten des Funktionsparameters und der Rückgabeadresse, die angeben, wo das Steuerelement nach Abschluss der Funktionsausführung zurückgegeben werden soll.

Definition von Haufen

Die Heap-Allokation folgt keinem bestimmten Ansatz. Vielmehr erlaubt es eine zufällige Zuordnung und Aufhebung der Zuordnung des Speichers. Eine Zuweisungsanforderung durch einen Prozess gibt einen Zeiger auf den zugewiesenen Speicherbereich in einem Heap zurück, und der Prozess greift über den Zeiger auf den zugewiesenen Speicherbereich zu.

Die Aufhebung der Zuordnung wird über die Aufhebungsanforderung durchgeführt, anders als bei dem Stapel, bei dem die Zuordnung des Speichers automatisch aufgehoben wird. Heap entwickelt Lücken in der Speicherzuordnung, wenn Datenstrukturen erstellt und freigegeben werden. Es wird zur Laufzeit verwendet.

  1. In einem Stack wird die Zuweisung und Freigabe von der CPU vorgenommen und erfolgt automatisch, wohingegen in einem Heap die Zuweisung vom Programmierer manuell vorgenommen werden muss.
  2. Die Handhabung von Heap-Frames ist kostspieliger als die Handhabung von Stack-Frames.
  3. Die Implementierung eines Stacks ist komplex. Die Implementierung eines Heaps ist dagegen einfach.
  4. Ein Funktionsaufruf im Stack benötigt O (N) Zeit. Im Gegensatz dazu benötigt ein Heap O (1) -Zeit.
  5. Die Stack-Implementierung leidet hauptsächlich unter dem Problem des Speichermangels. Im Gegenteil, das Hauptproblem in einem Haufen ist die Fragmentierung.
  6. Der Zugriff auf einen Stack-Frame ist einfacher als auf den Heap, da der Stack auf den kleinen Speicherbereich beschränkt ist und immer den Cache erreicht. Heap-Frames sind jedoch über den gesamten Speicher verteilt, sodass der Speicherzugriff zu mehr Cache-Fehlern führen kann.
  7. Der Stapel ist nicht flexibel, die zugewiesene Speichergröße kann nicht geändert werden. Andererseits ist ein Heap flexibel und der zugewiesene Speicher kann geändert werden.
  8. Ein Heap benötigt mehr Zugriffszeit als ein Stack.

Fazit

Die Stapelzuweisung ist schneller, aber komplex. Andererseits ist ein Heap langsamer, aber seine Implementierung ist einfacher als ein Stack. Heap ist effizienter als der Stapel.