Frage

Angenommen, wir diese lokalen Variablen haben:

int a = 0;
int b = 1;
int c = 2;
int d = 3;

Soweit ich weiß, werden diese auf dem System-Stack zugeordnet werden, wie folgt:

|   |
| 3 | d
| 2 | c
| 1 | b
|_0_| a

Bedeutet dies, dass, um den Wert von a zu erhalten, müssen die Werte von d, c und b zuerst aus dem Stapel genommen werden? Wenn ja, wohin gehen diese Werte? Bedeutet dies, dass mehr Zugriff auf kürzlich deklarierten Variablen wird schneller sein? Oder bin ich etwas fehlt (was ich vermute, der Fall ist), und das Ganze funktioniert auf andere Weise?

EDIT: Dank, Jungs

War es hilfreich?

Lösung

Die lokalen Variablen auf dem Stapel sind in der Regel in Bezug auf die so genannte Rahmenzeiger zugegriffen , die zu Beginn des Stapelrahmens zeigt. Es wäre auch möglich, diese in Bezug auf den Stapelzeiger zu tun, aber da dies bewegt sich bei der Auswertung von Ausdrücken ist es schwieriger, den Überblick zu behalten.

In der Praxis werden solche Variablen auch in Prozessorregistern gehalten werden kann.

Andere Tipps

  

Oder bin ich etwas fehlt

Sie sind vermisst, dass der Stapel in regelmäßigen Speichern befindet, der Direktzugriff erlaubt - einfach die entsprechenden an den Rahmenzeiger (die Unterseite der ‚lokalen‘ Stack) und Sie einen Zeiger auf die Zelle die Haltespeicher erhalten Offsetzumischung Wert.

  

Bedeutet dies, dass zu erhalten, um   der Wert von a, werden die Werte von d, c und   b muss zuerst aus der geknallt werden   stapeln?

Der Code emittieren einfach bewegt die Stapelzeiger die korrekte Anzahl von Bytes, bei der Eingabe die Funktion. Es bewegt sich um die gleiche Strecke zurück, wenn die Funktion zu verlassen. Somit muss Pop-off es nicht die individuell Variablen. Unter der Annahme, ein int ist 4 Byte, das Beispiel gab man würde den Stapelzeiger 16 Bytes bewegen. Es bewegt sich tatsächlich weiter als dies aufgrund anderer Informationen, die in dem Stapelrahmen wie die Absenderadresse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top