Al di là dell'esempio è fondamentale fare delle precisazioni, ovvero parlare di 2 differenze tra lo STACK e l'HEAP; è ovvio che se ne potrebbe parlare per ore, tuttavia ritengo che, a questo livello, possa bastare.

Queste differenze riguardano:

1. ciò che viene allocato
2. ciclo di vita di ciò che viene allocato


HEAP: vi si alloca tutto ciò che è allocato dinamicamente (es. malloc e derivati, new), tale area è allocata/rimossa solo su richiesta del programma, non automaticamente; il ciclo di vita coincide con la durata del programma, salvo deallocazione dinamica tramite free, delete (a patto che sia ancora possibile ciò).

STACK: vi si allocano le variabili locali non static e le variabili contenenti gli argomenti di una determinata funzione; il tempo di vita è correlato alla funzione nel senso che quando la funzione termina, l'area di stack allocata viene rimossa.

Le variabili locali static hanno allocazione compilatore-dipendente.


Spero che ora sia più chiaro.


Ciao