Se ho programmato - senza saperlo - una perdita di memoria e l'applicazione termina, la memoria persa viene liberata?
Se ho programmato - senza saperlo - una perdita di memoria e l'applicazione termina, la memoria persa viene liberata?
Risposte:
Sì, una "perdita di memoria" è semplicemente memoria a cui un processo non ha più un riferimento e quindi non può più liberare. Il sistema operativo tiene ancora traccia di tutta la memoria assegnata a un processo e la libererà al termine del processo.
Nella stragrande maggioranza dei casi il sistema operativo libererà la memoria, come nel caso delle normali "versioni" di Windows, Linux, Solaris, ecc. Tuttavia è importante notare che in ambienti specializzati come vari sistemi operativi in tempo reale il la memoria potrebbe non essere liberata quando il programma viene terminato.
Il sistema operativo che esegue il programma di solito pulisce la memoria che non viene liberata in modo esplicito e gestisce che non vengono chiusi in modo esplicito, ma ciò non è garantito dallo standard C ++. Potresti trovare alcuni dispositivi incorporati che non liberano le perdite di memoria.
Detto questo, Windows e tutte le distribuzioni di Linux che io abbia mai visto liberano perdite di memoria.
Puoi facilmente creare un enorme ciclo di perdite di memoria per testarlo tu stesso. Guarda aumentare l'utilizzo della RAM e quindi chiudi il programma. Vedrai che l'utilizzo della RAM diminuisce.
Un'altra considerazione quando si utilizza C ++ è che se non si elimina la memoria allocata nell'heap, anche i distruttori non vengono chiamati. A volte avrai anche altri effetti collaterali se i tuoi distruttori non vengono chiamati.
Di solito sì. Alcuni sistemi supportano cose come i blocchi di memoria condivisa che non vengono liberati automaticamente quando un programma esce. La maggior parte mantiene ancora un conteggio dei riferimenti e lo elimina quando tutti i programmi che lo hanno aperto escono, ma alcuni non lo fanno (ad esempio, Windows a 16 bit aveva alcuni tipi di elementi che sarebbero rimasti allocati anche quando non si riferiva a loro, sebbene di solito si bloccava per altri motivi prima che si accumulasse una quantità sufficiente di questo per causare un problema ...)
Dipende dalla memoria che hai perso. Parte della memoria non può essere recuperata dal sistema operativo. La maggior parte della memoria sulla maggior parte dei sistemi operativi, tuttavia, verrà automaticamente recuperata quando il processo termina.