Wie werden Variablen im Speicher in Rekursion gespeichert?

8

Ich bin unsicher, wie Variablen während der Rekursion im Speicher erzeugt und gespeichert werden. Unten ist ein Beispiel aus C Primer Plus:

%Vor%

Was die Ausgabe ergibt:

  

Level 3: 0x3ce1f8bc

     

Stufe 4: 0x3ce1f89c

     

EBENE 4: 0x3ce1f89c

     

EBENE 3: 0x3ce1f8bc

Es sieht so aus, als ob die "n" Variable, die für den ursprünglichen Funktionsaufruf lokal ist, eine Adresse ist, die sequenziell später ist als die des ersten (und einzigen) rekursiven Aufrufs. Warum das?

Wenn ich eine Funktion aufruft, werden nicht ihre formalen Parameter deklariert und in Bezug auf das eigentliche Argument definiert? Bedeutet das nicht, dass die Ganzzahl n local für den ersten Aufruf vor dem zweiten (rekursiven) Aufruf erstellt wird? Wie könnte das n des zweiten Anrufs eine Adresse früher als der erste Anruf haben?

    
Theo Chronic 12.07.2013, 01:41
quelle

3 Antworten

8

Dies liegt daran, dass die lokalen automatischen Variablen, die während der rekursiven Funktionsaufrufe erstellt wurden, auf dem Stapel gespeichert werden und der Stapel auf den meisten Plattformen, einschließlich x86, von einer höheren zu einer niedrigeren Adresse "nach unten" wächst. Daher wird eine Funktion, die später im Prozess aufgerufen wird, Variablen mit einer "niedrigeren" Adresse haben als Variablen, die von einem früheren Funktionsaufruf gespeichert wurden.

    
Jason 12.07.2013 01:44
quelle
3

Lokale Variablen (einschließlich Funktionsargumente) werden im Stapel gespeichert. Der Stack wächst zu niedrigeren Adressen hin, was Sie beobachten:

Je tiefer Sie also in die Rekursion gehen, desto niedriger sind die Adressen.

    
jh314 12.07.2013 01:46
quelle
0

Dies liegt daran, dass lokale Variablen auf dem Stapel liegen und der Stapel aus dem hohen Speicher zu wenig Speicher zugeordnet ist. Das heißt, je früher eine Variable definiert wird, desto höher ist ihre Adresse.

    
Manas 12.07.2013 01:47
quelle

Tags und Links