nikpez di nikpez
Ominide 738 punti

Aree di memoria

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.

Registrati via email