Concetti Chiave
- Il code segment ospita il codice del programma, mentre il data segment include variabili globali e statiche.
- L'area stack gestisce i record di attivazione delle funzioni, essenziale per la semantica delle chiamate annidate.
- Ogni funzione attiva crea un nuovo record di attivazione, che è gestito come una pila LIFO (Last In, First Out).
- I record di attivazione vengono automaticamente creati e deallocati con l'inizio e la fine dell'esecuzione della funzione.
- Il risultato di una funzione può essere memorizzato nel record di attivazione o restituito tramite un registro della CPU.
CODE SEGMENT: contiene il codice del pgm.
DATA SEGMENT: contiene le variabili globali e statiche (static)
AREA STACK: contiene i record di attivazione delle funzioni(parametri e variabili locali)
AREA HEAP: disponibile per allocazioni dinamiche.
-
L'area stack contiene i record di attivazione delle funzioni.
Un record di attivazione rappresenta il "mondo" della funzione e contiene:
I paramentri ricevuti
Le variabili locali
L'indirizzo(del chiamante) a cui tornare alla fine
Un riferimento al record di attivazione del chiamante
Ad ogni attivazione di funzione viene creato un nuovo record di attivazione specifico per quella chiamata.
Per catturare la semantica delle chiamate annidate(una funzione che chiama un'altra funzione che...), quest'area di memoria è gestita come una pila(stack):
Last In,First Out -> LIFO
La dimensione del record di attivazione:
varia da una funzione all'altra
ma,per una data funzione, è fissa e calcolabile a priori.
Il record di attivazione:
viene creato automaticamente nel momento in cui la funzione viene chiamata
rimane sullo stack per tutto il tempo in cui la funzione è in esecuzione
viene deallocato automaticamente quando la funzione termina.
Funzioni che chiamano altre funzioni danno luogo a una sequenza di record di attivazione:
allocati secondo l'ordine delle chiamate
deallocati in ordine inverso
Quando la funzione termina, il controllo torna al chiamante, che deve:
riprendere la sua esecuzione dall'istruzione successiva alla chiamata della funzione
trovare il suo "mondo" inalterato.
Per le funzioni, spesso il record di attivazione prevede una ulteriore cella,destinata a contenere il risultato della funzione.
Tale risultato viene copiato dal chiamante prima di deallocare il record della funzione appena terminata.
Altre volte, il risultato viene restituito dalla funzione al chiamante lasciandolo in un registro della CPU.