4° Anno TEORIA 2. Allocazione dinamica della memoria | Page 5

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
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