Die meisten meiner Kenntnis ist nicht Windows-spezifische, so Bär mit mir:
Der Heap und der Stack beziehen sich auf verschiedene Bereiche im Speicher (aber wir sprechen immer noch über den Hauptspeicher). Dies ist für keine Sprache spezifisch. Der Heap lebt in den niedrigen Speicheradressen und wächst nach oben; Der Stapel lebt in den hohen Speicheradressen und wächst nach unten. Dies soll verhindern, dass sie sich überschneiden (was sehr schlimm wäre).
Bei einer 32-Bit-Architektur verfolgen die EBP- und ESP-Register den aktuellen Stapelrahmen. EBP ist der Basiszeiger - dies zeigt auf die hohe Adresse des aktuellen Stapelrahmens. ESP ist der Stapelzeiger und zeigt auf die niedrige Adresse des aktuellen Stapelrahmens.
Denken Sie daran, dass das Konzept des freien/zugewiesenen Heap- und Stack-Speichers hauptsächlich auf Anwendungsebene relevant ist. Auf der Maschinenebene sieht der gesamte Speicher gleich aus - es liegt am Programmierer (oder Compiler), zu verfolgen, welche Speichersegmente verwendet werden.
Der Stapel wird durch eine Kombination von Anweisungen verwaltet, die Funktionen aufrufen, und explizite Änderungen an EBP und ESP. Alles unter ESP gilt als befreit; Um Speicher freizugeben, können Sie ESP einfach hinzufügen.
Der Haufen von Speicherzuordnungsverfahren verwaltet wird; Dokumentation kann here gefunden werden. Ich bin über die Einzelheiten von Winows nicht sicher, aber im Allgemeinen wird es einige Speicher-Manager sein, der die Verantwortung dafür, dass kein Speicherblock hat auf mehr als eine Anwendung zugeordnet.
Danke für die Info, aber es wirft mehr Fragen auf xD!Woher wissen Windows, wo sie den Heap und Stack im Raw-RAM abbilden sollen, damit sie sich nicht überschneiden oder mit anderen Prozessen kollidieren? Besonders wenn sich seine Größe dynamisch ändert? – Daniel
@Daniel: Bei anderen Prozessen verwendet ein Betriebssystem virtuellen Speicher. Jeder Prozess sieht seine eigene Sicht auf den Speicher (der virtuelle Adressraum). Und ja, der Prozessor hat einen Mechanismus, um eine virtuelle Adresse in eine physische umzuwandeln. Siehe http://en.wikipedia.org/wiki/Virtual_memory – Bahbar