In genere il sistema operativo associa due o piu' aree di memoria ad un processo.
Di certo c'e' un'area codice: siccome puo' essere condivisa da diverse istanze dello stesso programma (multiprocessing) non dovrebbe contenere dati.
Quindi c'e' un'area dati, di solito divisa in stack ed heap: di questo puo' occuparsi il compilatore a tempo di compilazione. (Ovviamente se ci sono piu' aree dati il problema non si pone...)
Nello stack vengono impilate le variabili locali del blocco in esecuzione, in modo che il ritorno dalla funzione invocata non comporti la loro cancellazione: basta riportare lo stack pointer al valore precedente. E' un po' confuso come l'ho spiegato in effetti... Ma gugolando un po:
basta osservare come si muove la cima della stack
Nello heap vanno le variabili statiche, o cmq tutto cio' la cui visibilita' non e' limitata al blocco in esecuzione.
Resta il problema dell'allocazione dinamica. A questo scopo credo che ogni linguaggio, se non ogni compilatore, provveda a suo piacimento.
Girando un po' vedo che anche l'area designata all'allocazione dinamica viene chiamata heap, ed in effetti potrebbe coincidere con lo heap...

Rispondi quotando