Warum werden der Laufzeitheap für die dynamische Speicherzuweisung in Sprachen im C-Stil und die Datenstruktur als "Heap" bezeichnet? Gibt es eine Beziehung?
c++
heap
terminology
heap-memory
Andrey Fedorov
quelle
quelle
Antworten:
Donald Knuth sagt (The Art of Computer Programming, 3. Aufl., Bd. 1, S. 435):
Er sagt nicht, welche Autoren und gibt keine Verweise auf bestimmte Artikel, aber er sagt, dass die Verwendung des Begriffs "Haufen" in Bezug auf Prioritätswarteschlangen der traditionelle Sinn des Wortes ist.
quelle
Sie haben den gleichen Namen, sind sich aber nicht wirklich ähnlich (auch nicht konzeptionell). Ein Speicherhaufen wird als Haufen bezeichnet, so wie Sie einen Wäschekorb als "Kleiderhaufen" bezeichnen würden. Dieser Name wird verwendet, um einen etwas unordentlichen Ort anzuzeigen, an dem Speicher nach Belieben zugewiesen und freigegeben werden kann. Die Datenstruktur (wie der Wikipedia-Link zeigt, auf den Sie verweisen) ist ganz anders.
quelle
Die Namenskollision ist unglücklich, aber nicht so mysteriös. Heap ist ein kleines, gebräuchliches Wort, das einen Stapel, eine Sammlung, eine Gruppe usw. bedeutet. Die Verwendung des Wortes für die Datenstruktur datiert (ich bin mir ziemlich sicher) vor dem Namen des Speicherpools. In der Tat wäre Pool meiner Meinung nach eine viel bessere Wahl für Letzteres gewesen. Heap bezeichnet eine vertikale Struktur (wie ein Stapel), die zur Datenstruktur passt, nicht jedoch zum Speicherpool. Wir betrachten einen Speicherpool-Heap nicht als hierarchisch, während die Grundidee hinter der Datenstruktur darin besteht, das größte Element oben auf dem Heap (und den Sub-Heaps) zu halten.
Die Datenstruktur stammt aus der Mitte der 60er Jahre. Haufen den Speicherpool, die frühen 70er Jahre. Der Begriff Heap (Speicherpool) wurde mindestens 1971 von Wijngaarden in Diskussionen über Algol verwendet.
Möglicherweise wurde die früheste Verwendung von Heap als Datenstruktur sieben Jahre zuvor in
Williams, JWJ 1964, gefunden. "Algorithm 232 - Heapsort", Communications of the ACM 7 (6): 347-348
quelle
Das Lesen über die Art und Weise, wie Speicher zugewiesen wird (siehe Buddy-Blöcke ), erinnert mich an einen Haufen in Datenstrukturen.
quelle
IMO ist es nur ein Zufall / Zufall, dass diese beiden völlig unabhängigen Dinge den gleichen Namen haben. Es ist wie Grafik und Grafik .
quelle
Die Heap-ähnliche Datenstruktur wird vom Algorithmus zum Ermitteln der verfügbaren Speicherzuordnung verwendet. Das Folgende ist ein Auszug aus http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
quelle
Die umgangssprachlichen Begriffe Stapelspeicher und Heapspeicher werden im C ++ - Standard nicht verwendet. Der Standard verwendet statischen Speicher, Thread-Speicher, automatischen Speicher und dynamischen Speicher.
Weitere Informationen finden Sie im Abschnitt Speicherdauer des Standards.
Aus Sicht der Sprache und der Standardbibliothek gibt es daher keine Verwirrung.
quelle
F. Was ist ein Haufen? A. Ein Haufen ist eine Sammlung von Objekten, die übereinander liegen.
Antwort auf Ihre Frage: Sowohl der Speicherheap als auch der Binärheap verwenden dasselbe Konzept wie Sie wissen. Daten werden in Form eines Heaps im Speicher in derselben Reihenfolge wie im Programm gespeichert gespeichert, während binärer Heap eine Datenstruktur ist, die dem gleichen Konzept folgt, Daten in geordneter Weise in Form eines Heaps zu speichern (Daten oben) des anderen). Lassen Sie mich wissen, was Sie in den Kommentaren denken.
quelle
Vielleicht wurde der erste implementierte Speicherheap von einer Heap-Struktur verwaltet?
quelle