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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
COME ALLOCARE DINAMICAMENTE I DATI NELLO HEAP
FUNZIONE DimensioneDi ( VAL < variabile > | < tipo dato >) : INT
E ’ un SOTTOPROGRAMMA ( FUNZIONE ) che restituisce la quantità di memoria espressa in byte ( numero intero ) che una variabile oppure un determinato tipo di dato occupa in memoria . E ’ di grande utilità in quanto evita al programmatore il calcolo della quantità di memoria da allocare nello heap per contenere un dato . Può essere utilizzata indipendentemente dal tipo di allocazione che si intende eseguire .
ALGORITMO Esempio _ 2 PROCEDURA main ( )
a : INT nbyte : INT
INIZIO // N . B . Verrà restituito in entrambi i casi 4 nbyte � DimensioneDi ( a )
Scrivi ( nbyte ) // oppure nbyte � DimensioneDi ( INT )
Scrivi ( nbyte ) FINE
// Utilizzando il linguaggio C – Esempio _ 2 # include < stdio . h > # include < stdlib . h >
int main ( int argc , char * argv []) { int a ; int nbyte ;
nbyte = sizeof ( a ); printf ("% d ", nbyte );
// oppure
nbyte = sizeof ( int ); printf ("\ n % d ", nbyte );
return 0 ; }
PROCEDURA Alloca ( REF < nome puntatore > : PUNTATORE A < tipo dato puntato ), VAL < numero byte > | DimensioneDi (< variabile > | < tipo dato >) )
E ’ un SOTTOPROGRAMMA ( PROCEDURA ) che assegna al puntatore < nome puntatore > l ’ indirizzo di un ’ area di memoria ALLOCATA DINAMICAMENTE situata nello heap con dimensione in byte pari al valore del secondo parametro , da utilizzare successivamente per memorizzare un dato .
Qualora tale allocazione non fosse possibile per ragioni tecniche o perché è terminata la memoria a disposizione tra heap e segmento stack , la procedura Alloca ( ) assegnerà al puntatore il valore NULL .
Tale valore NULL ( letteralmente " niente ") abbiamo già visto essere un particolare valore COSTANTE che sta ad indicare che il puntatore non è associato a nessuna area dì memoria correttamente allocata ossia che non punta a nessuna area di memoria , indipendentemente dalla modalità di allocazione .
PROCEDURA Dealloca ( VAL < nome puntatore > : PUNTATORE A < tipo dato puntato )
E ’ un SOTTOPROGRAMMA ( PROCEDURA ) che rilascia la memoria occupata nello heap da una precedente operazione di Alloca ( ) rendendola disponibile di nuovo per eventuali successive allocazioni dinamiche .
Da notare la chiamata a tale procedura in pratica romperà il link o collegamento che si era creato tra il puntatore e la zona di memoria puntata nello heap ma NON LO ANNULLERA ’ ( ossia esso non verrà posto a NULL ), in quanto conterrà ancora il valore che aveva ricevuto in precedenza ma che in ogni caso , non gli permetterà più il raggiungimento dell ’ area di memoria associata in precedenza .
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 9