Come funziona l’allocazione dinamica della memoria in informatica

Come funziona l’allocazione dinamica della memoria in informatica

Il meccanismo di allocazione dinamica della memoria permette di allocare esplicitamente blocchi di memoria di dimensione arbitraria in un’area dedicata, detta heap (con delle ovvie limitazioni di dimensione massima che variano a seconda dell’implementazione dell’allocatore di memoria). Tale meccanismo permette di risolvere alcune problematiche legate alla gestione della memoria che non possono essere gestite in modo adeguato tramite l’allocazione statica o automatica della memoria. La memoria allocata staticamente persiste per l’intera vita del programma ma deve essere dimensionata al momento della compilazione. Il meccanismo di allocazione automatica della memoria rappresenta il modo in cui viene gestita l’allocazione delle variabili locali. Esse vengono infatti allocate al momento in cui il flusso di esecuzione raggiunge lo scope delle variabili locali stesse, ad esempio al momento dell’esecuzione della funzione in cui esse sono visibili. Quando il flusso di esecuzione lascia lo scope di tali variabili esse vengono deallocate. Dunque non è possibile controllare contemporaneamente la visibilità e la dimensione delle variabili senza sfruttare il meccanismo di allocazione dinamica della memoria. Il programmatore ha quindi la possibilità di allocare un’area di memoria, utilizzarla per poi liberarla, rendendola di nuovo disponibile per altre operazioni di allocazione dinamica. Di solito una libreria di sistema mappata nello spazio di indirizzamento del processo si incarica di gestire le operazioni di allocazione e di deallocazione della memoria.

Come funziona l'allocazione dinamica della memoria in informatica

Come lo stack, anche lo heap contiene anche informazioni di gestione insieme ai dati stessi. Come risultato abbiamo che gli attacchi di buffer overflow sullo heap hanno lo stesso principio di base dei buffer overflow sullo stack, ovvero sovrascrivere informazioni di gestione specifiche per deviare il flusso di esecuzione del programma con l’obiettivo di eseguire codice arbitrario. Le modalitàa con cui la vulnerabilità viene sfruttata, come vedremo, sono significativamente diverse.

Precedente Organizzazione della memoria virtuale di un processo in informatica Successivo Cos'è e come prevenire il Disaster recovery in informatica

Lascia un commento