Speicherverwaltung: Aktivierungs-Records und Stack-Struktur
Eingeordnet in Elektronik
Geschrieben am in
Deutsch mit einer Größe von 2,22 KB
Memory-Zelle: Aktivierungs-Records
Rekursive Funktionen erfordern unterschiedliche Aktivierungs-Records, d. h. die Menge der Werte der Variablen wird bei jeder Funktionsausführung gespeichert.
Diese Aktivierungs-Records werden in einem Stapel (Stack) abgelegt, sodass der Eintrag an der Spitze des Stacks der aktuell ausgeführten Funktion entspricht.
Zum Abschluss der Ausführung einer Funktion muss der Aktivierungs-Record vom Stack entfernt werden. Beim Wechsel von einer Funktion zur anderen ist es notwendig, den Zustand der Maschine (die Werte der Prozessor-Register) zu speichern. Zudem muss die Adresse des Aktivierungs-Records der aufrufenden Funktion gesichert werden. Diese Informationen werden jedem Aktivierungs-Record hinzugefügt.
Struktur eines Aktivierungs-Records
Der stackbasierte Speicher nutzt folgende Struktur:
- Stack Pointer (SP): Zeigt auf die Spitze des Stacks.
- Frame Pointer (FP): Basis-Adresse des Aktivierungs-Records der aktiven Funktion.
Die Werte der Parameter einer Funktion entsprechen negativen Offsets zum FP, während lokale Variablen und temporäre Werte positiven Offsets entsprechen.
Prozeduraufruf einer Funktion
Beim Aufruf einer Funktion werden folgende Schritte durchgeführt:
- Reservierung von Platz für den Rückgabewert.
- Speicherung der Parameterwerte für die aufgerufene Funktion.
- Speicherung der Rücksprungadresse (Adresse des Codes der aufrufenden Funktion).
- Speicherung des Maschinenzustands (einschließlich SP und FP).
- Übergabe der Kontrolle an die aufgerufene Funktion und Start der Code-Ausführung.
Rückgabe einer Funktion
Bei der Rückkehr aus einer Funktion erfolgen diese Schritte:
- Zuweisung des Rückgabewerts.
- Wiederherstellung des Maschinenzustands. Dies ändert die Werte von FP und SP und gibt den Speicher des Aktivierungs-Records der aufgerufenen Funktion frei.
- Wiederherstellung der Rücksprungadresse.
- Die Kontrolle wird an die aufrufende Funktion zurückgegeben; der Rückgabewert wird in der entsprechenden lokalen oder temporären Variablen gespeichert.