Concetti Chiave
- Il code segment contiene istruzioni eseguibili in memoria di sola lettura con dimensioni fisse, definite durante la compilazione.
- Il data segment gestisce variabili globali e locali statiche, con sezioni per variabili non inizializzate e read-only.
- L'heap è utilizzato per la gestione dinamica della memoria, crescendo verso indirizzi più alti durante l'esecuzione.
- Lo stack memorizza informazioni sulle chiamate a funzione, crescendo verso il basso con gestione LIFO.
- Ogni chiamata a funzione alloca un record di attivazione nello stack, liberato al termine della funzione.
Spazio di indirizzamento virtuale
Struttura spazio di indirizzamento virtuale:
Il code segment (o text segment), contiene le istruzioni eseguibili. Quando il compilatore genera un file oggetto, una parte di questo file contiene le istruzioni eseguibili, cha al momento dell’esecuzione del programma, viene caricato in code segment con un indirizzo virtuale. Code segment è una memoria di sola lettura ed ha dimensione fissa, determinata al momento della compilazione, ogni istruzione ha un preciso indirizzo di memoria virtuale.
- Il data segment è uno spazio di memoria, di dimensioni fisse, dedicata alla variabili globali e locali static.
- L’heap è usato per la gestione dinamica della memoria, utilizzata per immagazzinare dati temporanei durante l’esecuzione del programma. La dimensione di questa sezione è nota solo al momento dell’esecuzione. Questa sezione è di solito dopo il data segment e cresce verso indirizzi di memoria più alti.
- Il stack (o call stack, stack delle invocazioni a funzione) è usata per tenere informazioni riguardo le chiamate a funzione durante l’esecuzione del programma.
Questa sezione è generalmente posizionata negli indirizzi di memoria più alti e cresce verso il basso. Quando c’è una chiamata a funzione c’è l’allocazione sullo stack di un record di attivazione riguardo la chiamata, il record di attivazione contiene l’indirizzo di ritorno (da eseguire al termine della funzione), i parametri attuali passati alla funzione e le variabili locali della funzione. Lo stack segue la modalità LIFO: una chiamata a funzione provoca l’allocazione del record di attivazione, posizionato in cima, quando la funzione termina il record di attivazione è liberato e viene riattivato quello precedente.
Domande da interrogazione
- Qual è la funzione del code segment nello spazio di indirizzamento virtuale?
- Come viene gestita la memoria nel data segment?
- In che modo lo stack gestisce le chiamate a funzione?
Il code segment contiene le istruzioni eseguibili del programma, caricate con un indirizzo virtuale al momento dell'esecuzione. È una memoria di sola lettura con dimensione fissa determinata durante la compilazione.
Il data segment è dedicato a variabili globali e locali statiche, con una sezione BSS per variabili non inizializzate. La memoria per il BSS viene allocata a run-time, e tranne la sezione read-only, il contenuto può essere modificato durante l'esecuzione.
Lo stack tiene traccia delle chiamate a funzione tramite record di attivazione, che contengono l'indirizzo di ritorno, i parametri attuali e le variabili locali. Segue la modalità LIFO, allocando e liberando i record di attivazione in base all'ordine delle chiamate e terminazioni delle funzioni.