10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
SCENARIO B)
Se un programma utilizza sottoprogrammi impiega, oltre alle risorse globali e locali, anche il segmento stack inserendo( operazione push), ad ogni chiamata( o attivazione) di un sottoprogramma nella“ pila delle attivazioni”, l’ indirizzo dell’ istruzione successiva alla chiamata stessa, che verrà poi richiamato alla fine dell’ esecuzione del sottoprogramma stesso( operazione pop).
La“ pila delle attivazioni” gestisce le informazioni fondamentali relative alle chiamate di procedure e funzioni utilizzando la tecnica L. I. F. O.( Last In First Out ossia“ l’ ultimo dato ad entrare è il rpimo ad uscire”).
Segmento“ HEAP” di sistema( decresce mentre lo stack cresce)
Segmento“ HEAP” di sistema
Segmento“ STACK”: all’ istante di attivazione di un sottoprogramma viene allocata una zona di memoria per
Segmento“ STACK” gestire il rapporto tra programma chiamante e programma chiamato( cresce mentre lo heap decresce)
Segmento“ DATI” Segmento“ CODICE”
Segmento“ DATI”: area contenente variabili e costanti allocate staticamente
Segmento“ CODICE”: area contenente le istruzioni del programma scritte in linguaggio
N. B. L’ allocazione all’ interno dello heap di locazioni di memoria avverrà in entrambi i casi( SCENARIO A oppure SCENARIO B) solo se verranno utilizzate variabili allocate dinamicamente tramite l’ utilizzo di un’ apposita funzionalità- la PROCEDURA Alloca()- che verrà spiegata più avanti.
E’ evidente che lo heap ossia l’ area libera dove allocare dinamicamente i dati e lo stack ossia l’ area di memoria dove vengono gestite le risorse dei sottoprogrammi, si contendono l’ area libera assegnata, muovendosi verso direzioni convergenti ossia da direzioni opposte.
N. B. Una eventuale collisione provocherà di fatto l’ esaurimento della dimensione totale di memoria messa a disposizione dei due segmenti( HEAP + STACK) e di conseguenza l’ interruzione( abend o crash) del programma
Al contrario del segmento“ stack”, il segmento“ dati” ha una dimensione prefissata. Questo è uno dei motivi per il quale si giustifica il ricorso all’ allocazione dinamica delle variabili aggirando il problema che spesso le variabili necessarie al programma non riescono ad essere collocate tutte all’ interno del segmento“ dati”.
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 5