2016-04-20 11 views
0

Ich würde gerne wissen, ob der Stack und Heap im Stack-und Heap-Speicher tatsächlich als Stack-und Heap-Datenstrukturen implementiert sind?Sind Stack- und Heap-Speicher tatsächlich als Stack- und Heap-Datenstrukturen implementiert?

Ich denke, der Stapel ist eigentlich ein Stapel, Zeiger auf die LIFO (Last In First Out) Variablen in Funktionen deklariert, aber ich wollte bestätigen und auch fragen, ob der Heap mehr als nur seinen Namen zu den dynamischen Baumdaten Struktur, die die Heap-Eigenschaft erfüllt? Ich habe in letzter Zeit viel auf dem Stack und Heap gelesen und glaube, dass ich das Konzept verstehe, aber es machte mich dann neugierig auf die tatsächliche Implementierung. Ich kann mir vorstellen, dass es auf verschiedenen Architekturen auch anders sein könnte und es gibt möglicherweise keine spezifische allgemeine Antwort für alle Computer und Betriebssysteme.

Für den Fall, dass jemand auf diese Frage kommt, wer immer noch nicht sicher ist, was und wo der Stapel und Haufen sind, sehen Sie bitte diese Frage und andere Links, die ich hilfreich beim Erlernen des Stapel- und Heap-Konzepts fand.

What and where are the stack and heap? http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/ https://www.youtube.com/watch?v=_8-ht2AKyH4

Antwort

1

Der Heap-Speicher ist entschieden kein Heap-Datenstruktur. Das heißt, es handelt sich nicht um eine Prioritätswarteschlange. Ich nehme an, Sie könnten einen Speicher für die Prioritätswarteschlange verwenden, um einen Speicherheap zu erstellen, aber es gibt viel bessere Möglichkeiten, dies zu tun.

Der Stack ist ... nun ... Normalerweise ist der Stack ein fester Speicherblock, der dem Prozess zugewiesen ist. Der Prozessor selbst behandelt diesen Speicherblock wie einen reinen Stapel. Das heißt, der Stapelzeiger des Prozessors zeigt auf den Anfang des Stapels, und die Push- und Popbefehle funktionieren wie erwartet, indem dem Stapel Dinge hinzugefügt und entfernt werden. Auf diese Weise ist es LIFO.

Allerdings kann der Prozessor alle möglichen Dinge mit dem Stapel tun: Push und Pop verschiedene Dinge, direkt in sie hinein (dh das dritte Element ohne die ersten beiden zu sehen) usw. So, obwohl der Prozessor-Stack tut haben Push-und Pop-Anweisungen, es hat auch viel mehr Funktionalität. Ich würde es nicht als reine LIFO-Datenstruktur bezeichnen.

0

Heap-Speicher: Es muss keine Heap-Datenstruktur sein. Ein Heap dient als Speicherbereich mit nicht fester Größe im virtuellen Speicher, und die den Programmierern zur Verfügung gestellten Funktionen sind Zuweisungen und Freigaben. Ein Heap kann mit verschiedenen Datenstrukturen implementiert werden. In Bezug auf die native C- und C++ - Entwicklung wird die Heap-Speicherstruktur von den verwendeten Zuordnern definiert. Sie sind verantwortlich für die Verwaltung der notwendigen Datenstrukturen und des virtuellen Speichers. In den unten stehenden Link können Sie die Standardimplementierungen auf Windows, Linux und MacOS sehen: http://core-analyzer.sourceforge.net/index_files/Page335.html

Stapelspeicher: Es doesn `t als Stapel implementiert werden müssen (first in last out) Datenstruktur, aber die Funktionalität, die es (nicht für Programmierer) zur Verfügung stellt, ist in Form einer Stapel-Datenstruktur. (Der Prozessor behandelt diesen Speicher, der vom Betriebssystem als Stapel-Datenstruktur angegeben wird.) Dies ist ein Speicherbereich mit fester Größe im virtuellen Speicher. In modernen Betriebssystemen, Stapel pro Thread sein, und Sie können auch mit ulimit in Linux, auf der anderen Seite in Windows-Seite diese Grenze definieren, ist es ein Linker Parameter: https://msdn.microsoft.com/en-US/library/8cxs58a6(v=vs.120).aspx

Hier ist auch eine andere schöne Lesung: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/