Tipi di allocazione nella memoria

La vita di un oggetto di solito corrisponde ai seguenti meccanismi di allocazione di memoria:

Allocazione statica

Nel maccanismo di allocazione statica un oggetto ha un indirizzo assoluto che è mantenuto per tutta l’esecuzione del programma. Solitamente viene usata per variabili globali, costanti determinabili durante la compilazione o tabelle usate dal supporto a run-time (come il garbage collector). Spesso si usa l’allocazione statica per le aree protette della memoria.

Allocazione dinamica

Come abbiamo visto l’allocazione dinamica fa uso sia dello stack che dell’heap. Guardiamo nel dettaglio entrambi i metodi.

Allocazione su Stack

La pila viene utilizzata generalmente per gestire i record di attivazione delle funzioni: è la soluzione più congeniale poiché i record di queste chiamate (anche ricorsive) sono annidati l’uno dentro l’altro, in questo modo ogni funzione ha la sua porzione di memoria con le relative informazioni della specifica istanza.

La pila è gestita con:

La memoria dinamica è quella che permette di avere un record di attivazione, poiché è impossibile saperne l’indirizzo a compile-time; mentre è invece possibile, dato lo stack pointer, determinare l’offset e ricavare l’indirizzo in cui si trova il record di attivazione.

Record di attivazione

Come abbiamo accennato, il record di attivazione è lo spazio della memoria che contiene tutte le informazioni relative necessarie alla funzione in esecuzione. Esso è formato da: