Antworten:
Vermutlich meinen Sie Heap aus Sicht der Speicherzuweisung, nicht aus Sicht der Datenstruktur (der Begriff hat mehrere Bedeutungen).
Eine sehr einfache Erklärung ist, dass der Heap der Teil des Speichers ist, in dem sich der dynamisch zugewiesene Speicher befindet (dh der über zugewiesene Speicher malloc
). Der vom Heap zugewiesene Speicher bleibt so lange zugewiesen, bis einer der folgenden Ereignisse eintritt:
free
'dWenn alle Verweise auf den zugewiesenen Speicher verloren gehen (z. B. speichern Sie keinen Zeiger mehr darauf), liegt ein sogenannter Speicherverlust vor . Hier wurde der Speicher noch zugewiesen, aber Sie haben keine einfache Möglichkeit mehr, darauf zuzugreifen. Durchgesickerter Speicher kann nicht für zukünftige Speicherzuweisungen zurückgefordert werden, aber wenn das Programm endet, wird der Speicher vom Betriebssystem freigegeben.
Vergleichen Sie dies mit dem Stapelspeicher , in dem lokale Variablen (die innerhalb einer Methode definierten) leben. Der auf dem Stapel zugewiesene Speicher bleibt im Allgemeinen nur bis zur Rückkehr der Funktion erhalten (es gibt einige Ausnahmen, z. B. statische lokale Variablen).
Weitere Informationen zum Heap finden Sie in diesem Artikel .
Ein Speicher - Heap eine Stelle im Speicher , wo Speicher können bei wahlfreiem Zugriff zugewiesen werden.
Im Gegensatz zu dem Stapel, in dem Speicher in einer genau definierten Reihenfolge zugewiesen und freigegeben wird, werden einzelne Datenelemente, die auf dem Heap zugewiesen sind, normalerweise auf asynchrone Weise freigegeben. Ein solches Datenelement wird freigegeben, wenn das Programm den entsprechenden Zeiger explizit freigibt, und dies kann zu einem fragmentierten Heap führen. Im Gegensatz dazu können nur Daten oben (oder unten, je nach Funktionsweise des Stapels) freigegeben werden, was dazu führt, dass Datenelemente in der umgekehrten Reihenfolge freigegeben werden, in der sie zugewiesen wurden.
Heap ist nur ein Bereich, in dem Speicher ohne Reihenfolge zugewiesen oder freigegeben wird. Dies geschieht, wenn man ein Objekt mit dem new
Operator oder ähnlichem erstellt. Dies steht im Gegensatz zu einem Stapel, bei dem der Speicher auf der Basis des ersten und letzten Ausgangs freigegeben wird.
Ein Speicherhaufen ist eine übliche Struktur zum Halten von dynamisch zugewiesenem Speicher. Siehe Dynamic_memory_allocation auf Wikipedia.
Es gibt andere Strukturen wie Pools, Stapel und Stapel.
Dies ist ein Teil des Speichers, der vom Speichermanager, der von einem Prozess verwendet wird, vom Betriebssystem zugewiesen wird. Aufrufe an malloc()
ua nehmen dann Speicher von diesem Heap, anstatt sich direkt mit dem Betriebssystem befassen zu müssen.
Sie meinen wahrscheinlich Heap-Speicher, nicht Speicher-Heap.
Der Heap-Speicher ist im Wesentlichen ein großer Speicherpool (normalerweise pro Prozess), von dem das laufende Programm Chunks anfordern kann. Dies wird normalerweise als dynamische Zuordnung bezeichnet .
Es unterscheidet sich vom Stapel, in dem "automatische Variablen" zugewiesen werden. Wenn Sie beispielsweise in einer C-Funktion eine Zeigervariable definieren, wird auf dem Stapel genügend Speicherplatz für eine Speicheradresse zugewiesen. Sie müssen jedoch häufig dynamisch Speicherplatz (mit malloc) auf dem Heap zuweisen und dann die Adresse angeben, an der dieser Speicherblock für den Zeiger beginnt.