0 Daumen
359 Aufrufe

Hey,


ich habe folgende 2 Fragen über Stacks:

2. Warum wird bei einem Unterfunktionsaufruf (call) der Inhalt des Program Counter auf dem Stack gesichert, bei einem Sprung (jmp) aber nicht?

3. Globale Variablen erhalten vom C-Compiler feste Adressen im Hauptspeicher, sogenannte statische Speicherallokation. Funktionslokale Variablen werden auf dem Stack angelegt, dies wird automatische Speicherallokation genannt. Warum wird das so gemacht?

Vielen Dank!

Avatar von

1 Antwort

0 Daumen
 
Beste Antwort
Warum wird bei einem Unterfunktionsaufruf (call) der Inhalt des Program Counter auf dem Stack gesichert

Damit das Programm nach Beendigung der Unterfunktion dorthin zurückspringen kann, wo der Unterfunktionsaufruf stattgefunden hat.

bei einem Sprung (jmp) aber nicht?

Um einen Befehl zur Verfügung zu haben, bei dem man im Programm springen kann ohne den Stack zu verändern.

Globale Variablen erhalten vom C-Compiler feste Adressen im Hauptspeicher

Feste Adressen damit sie wiedergefunden werden können. Im Hauptspeicher weil wo denn sonst. BTW der Stack ist Teil des Hauptspeichers.

Funktionslokale Variablen werden auf dem Stack angelegt,

Weil dort schneller Speicher reserviert werden kann als auf dem Heap. Und weil die Daten nicht mehr benötigt werden sobald sobald die Funktion beendet wurde.

Avatar von 5,7 k

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community