Lo STOCK è l'area di memoria in cui vengono allocati i record di
attivazione; solitamente viene gestita come una pila. La politica
utilizzata è di tipo LIFO (l'ultimo elemento a entrare è il primo a
uscire), in quanto le due operazioni fondamentali PUSH (aggiunta
di elemento) e POP (tolgo elemento) avvengono dalla cima dello
stock.
All'interno dello stock troviamo porzioni di memoria per le
variabili locali della funzione (parte bassa dello stock), mentre
sopra troveremo una porzione di memoria contenente le variabili
locali della funzione chiamata; tale zona di memoria è detta
RECORD DI ATTIVAZIONE.
Il record di attivazione contiene tutto ciò che caratterizza una
funzione, ovvero: variabili locali, parametri, indirizzo a cui tornare
al termine dell'esecuzione, riferimento al record di attivazione del
chiamante.
Il record di attivazione è specifico di ogni funzione, per questo la
sua dimensione non è fissa. Esso viene creato in modo dinamico
nel momento in cui la funzione viene chiamata e rimane sullo
stock per tutto il tempo in cui la funzione è in esecuzione; viene
deallocato solo nel momento in cui la funzione termina il suo
svolgimento.
Quando il chiamante chiama una funzione, nel suo record di
attivazione si inseriscono:
→ l'indirizzo di ritorno (RTA): indirizzo della prossima istruzione
che il chiamante dovrà svolgere dopo la fine della funzione
→ link dinamico (LD): collegamento al RDA del chiamante, in
modo da poter ripristinare l'ambiente del chiamante quando la
funzione terminerà.
Nel caso del passaggio dei parametri per valore, il record contiene
una copia del valore assunto dal parametro attuale all'atto della
chiamata. Per quanto riguarda il passaggio per riferimento, il
record conterrà una copia dell'indirizzo della variabile che
costituisce il parametro attuale all'atto della chiamata.
Nessun commento:
Posta un commento