Le perdite di memoria non sono un problema una volta capito come funziona la gestione della memoria. Per affrontarli, hai bisogno di due cose:
Per prima cosa, ottieni un gestore di memoria di debug. Non so cosa sia disponibile per C, C ++ o Fortran, dal momento che sono uno sviluppatore Delphi, ma in Delphi c'è una sostituzione del gestore di memoria chiamata FastMM FullDebugMode che terrà traccia delle allocazioni e delle allocazioni e ti avviserà alla fine di il programma se hai perso qualcosa. Fornisce una traccia dello stack, informazioni sul tipo e altre utili informazioni di debug per ogni perdita, il che rende molto semplice rintracciare e correggere. Dovresti avere qualcosa di simile disponibile per altre lingue.
In secondo luogo, è necessario capire come strutturare l'allocazione della memoria per evitare che si verifichino perdite. La tecnica per questo può essere formalmente indicata come Principio di proprietà singola :
Each variable in your code has one and only one owner, and it’s the
responsibility of that owner to free the variable’s memory when it is
no longer needed.
Quello che è il singolo proprietario varierà a seconda di cosa sono le variabili e per cosa sono utilizzate. I primitivi, ad esempio, appartengono allo stack e verranno automaticamente ripuliti al ritorno di una funzione. La maggior parte degli oggetti, al contrario, appartiene a un altro oggetto. Quelle che non lo sono sono generalmente variabili locali che dovrebbero essere ripulite dalla routine che le ha create prima che esca.
Gli oggetti condivisi da più altri oggetti non hanno più proprietari; se ci pensi in questo modo stai cercando dei problemi. Invece, dovrebbero avere un unico proprietario, un sistema di conteggio dei riferimenti o un oggetto principale che sapete sarà più lungo di tutti gli altri.
Quando si interiorizza il Principio di proprietà singola, si scriverà molto meno codice con perdite. E quando hai un gestore di memoria di debug per fare rapporto su ciò che hai perso, correggere i pochi errori che farai non farai più una prospettiva spaventosa.