2013-03-15 9 views

Antwort

31

Stapel ist immer im RAM. Es gibt einen Stapelzeiger, der in einem Register in der CPU gehalten wird, das auf den Anfang des Stapels zeigt, d. H. Die Adresse des Ortes an der Spitze des Stapels.

+6

+1 Für die Angabe, dass ein Register von der CPU auf den Stapel zeigt –

8

Der Stack befindet sich im RAM und nicht in der CPU. Ein Segment wird für den Stapel gewidmet ist, wie in der folgenden Abbildung gezeigt:

enter image description here

Von Wiki:

der Stapelbereich enthält den Programmstapel, eine LIFO-Struktur, die typischerweise in der höher gelegenen Teile der Erinnerung.

3

Über welche CPU sprechen Sie?

  1. Einige Speicher enthalten könnte, dass für Callstacks verwendet wird, enthalten einige Speicher, dass für Callstacks verwendet werden können, erfordern aber das Betriebssystem die Aufrufhierarchie-Management-Code zu implementieren, und andere enthalten keine beschreibbaren Speicher überhaupt. Zum Beispiel neigt die x86-Architektur dazu, einen oder mehrere code caches and data caches in die CPU eingebaut zu haben.

  2. Einige CPUs oder Betriebssysteme implementieren Operationen, die bestimmte Speicherbereiche nicht ausführbar machen. Um beispielsweise stapelbasierte Pufferüberläufe zu verhindern, verwenden viele Betriebssysteme hardware and/or software-based data execution prevention, wodurch verhindert werden könnte, dass der Stapelspeicher als Code ausgeführt wird. Einige nicht; Es ist durchaus möglich, dass eine x86-CPU-Daten-Cache-Zeile verwendet werden kann, um sowohl den Callstack als auch den Code zu speichern, der in schnellerem-Speicher ausgeführt werden soll.

  3. EIP klingt wie ein Register für die IA32-CPU-Architektur. Wenn Sie sich auf IA-32 beziehen, dann ist es ja eine CPU-Operation, obwohl viele Betriebssysteme es zu/von RAM umschalten, um Multi-Tasking zu emulieren.