nikpez
Ominide
2 min. di lettura
Vota 3 / 5

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.
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.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community