Che cos'è l'allocazione dinamica della memoria?
L'allocazione dinamica della memoria, chiamata anche allocazione della memoria basata su heap, è un tipo di gestione della memoria che è nettamente contrastata dall'allocazione statica della memoria. Nell'allocazione dinamica della memoria, il programmatore comunica al computer esattamente la quantità di memoria da allocare per ciascun programma e per quanto tempo conservare la memoria. Ciò risolve molti dei problemi che si verificano nell'allocazione della memoria statica, come un uso eccessivo della memoria e programmi in stallo. Mentre risolve molti problemi, se il programmatore si dimentica di dire alla memoria di scaricare, allora la memoria dinamica può diventare un problema.
I computer, per impostazione predefinita, utilizzano l'allocazione di memoria statica. Ciò significa che la memoria si blocca sui programmi quando vengono utilizzati, anche se il programma non viene più utilizzato o se la memoria trattenuta diventa pericolosa o un ostacolo per le prestazioni. Ad esempio, se l'utente interrompe l'esecuzione di un programma che richiede 2 megabyte (MB) su una macchina da 3 MB e un secondo programma richiede altri 2 MB, il secondo programma non funzionerà. Questo perché non c'è abbastanza memoria nel computer per l'altro programma.
Con l'allocazione di memoria statica, l'utente o il programmatore non possono specificare la quantità di memoria che desidera archiviare, né il programmatore può dire alla memoria statica di scaricare la memoria per liberare risorse. Questo è il motivo per cui gli utenti esperti utilizzano spesso l'allocazione dinamica della memoria. Il programmatore è in grado di controllare tutto ciò che riguarda la memoria, incluso il tempo di trattenere le risorse.
Ad esempio, il programmatore può impostare l'allocazione dinamica della memoria in modo che rimanga solo su 1 MB o meno, il che risparmierebbe sufficiente memoria di sistema per consentire l'apertura di altri programmi. Questo può essere fatto perché la memoria statica di solito mantiene tutto ciò che riguarda il programma, mentre la memoria dinamica consente ai programmatori di impostarlo su un valore inferiore che contiene alcuni dati, ma non tutto. Allo stesso tempo, sarà ancora necessaria la memoria statica, che può essere impostata in questo schema di allocazione.
Un potenziale problema con l'allocazione dinamica della memoria - uno che raramente entra in gioco - è che la memoria dinamica può riempirsi se il programmatore dimentica di impostare un valore temporale. Se non viene impostato alcun valore temporale, diversamente dalla memoria statica che alla fine rilascerà la memoria, la memoria dinamica si manterrà sull'informazione. Se il programma ha un'applicazione di garbage dump e la maggior parte lo fa, si attiverà dopo un certo periodo di tempo per cancellare la memoria. È comunque consigliabile impostare un valore temporale per l'allocazione della memoria.