next up previous return to home!
Next:Operatore new Up: Appendice Previous: Uso del puntatore this

Allocazione dinamica della memoria

Le memorie sono dispositivi che permettono la memorizzazione di informazioni, sotto forma binaria; le informazioni possono essere dati, le istruzioni di un programma, i risultati intermedi e finali di operazioni.

L'area di memoria stack (pila) é caratterizzata dalla proprietà che l'ultimo dato che entra in memoria nella fase di scrittura è il primo ad uscire nella fase di lettura; per tale motivo è detta anche LIFO, dalle iniziali di Last In First Out. Il pacchetto di dati viene allocato in memoria non appena l'esecuzione passa dal programma chiamante a una funzione. Questo pacchetto, il quale contiene l'indirizzo di rientro nel programma chiamante e la lista degli argomenti passati alla funzione, viene impilato sopra il pacchetto precedente (quello del programma chiamante) e poi automaticamente rimosso dalla memoria appena l'esecuzione della funzione é terminata.

Grazie a questo meccanismo le funzioni possono essere chiamate ricorsivamente e inoltre si possono gestire funzioni con numero variabile di argomenti.

In realtà nella memoria stack vengono sistemate anche altre informazioni, e precisamente i dati relativi a tutte le variabili automatiche (cioè locali e non statiche) create dalla funzione. Il loro tempo di vita é legato all'esecuzione della funzione proprio perché, quando la funzione termina, l'intera area stack allocata viene rimossa.

Esiste un'altra area di memoria che il programma può utilizzare. Questa area, detta heap, è soggetta a regole di visibilità e tempo di vita completamente diverse da quelle che governano l'area stack e precisamente:

In C++ la memoria può essere allocata dinamicamente tramite l'operatore new e deallocata tramite l'operatore delete.


Subsections


Powered by Vincenzo Capuano