Questo articolo discuterà di cosa perdita di memoria è e quindi fornire una descrizione dettagliata su come trovare perdite di memoria In un codice o progetto C ++.
Cos'è una perdita di memoria
Un problema di computer chiamato a perdita di memoria fa sì che la memoria venga assegnata e liberata in modo improprio. Quando la memoria all'interno di un programma non viene più utilizzata dal programma, la memoria dovrebbe essere rilasciata nel sistema operativo, consentendo l'uso efficiente di tutta la memoria disponibile su un sistema. Tuttavia, quando un programma non riesce a rilasciare la memoria allocata e continua ad accedervi dopo che la sua utilità è stata servita, perdite di memoria può accadere. Questo può portare alla memoria consumata o 'trapelato'Fino a quando il sistema non si esaurisce la memoria libera e il programma si blocca. Poiché tutti i sistemi hanno una quantità finita di memoria e perché la memoria è costosa, l'utilizzo della memoria di un programma aumenterà se contiene perdite di memoria. Pertanto, causerà problemi.
Come trovare perdite di memoria in un codice o progetto C ++?
Esistono alcuni modi di base che puoi utilizzare per rilevare le perdite di memoria in un codice C ++.
1: controlla le basi degli operatori
Conoscere i fondamenti degli operatori. Il nuovo operatore assegna una memoria di heap. La memoria heap viene rilasciata utilizzando l'operatore Elimina. Per rilasciare la stessa memoria che è stata assegnata, è necessario eseguire un'elimina dopo ogni nuovo, altrimenti, c'è una possibilità di perdita di memoria.
2: riallocare solo dopo la cancellazione
Riallicare una memoria solo dopo aver eliminato la sua prima allocazione. Se una variabile ottiene un nuovo indirizzo per una seconda allocazione, il primo indirizzo e i byte ad essa associati vengono perduti permanentemente risultante perdita di memoria.
3: controlla i puntatori assegnati
Osserva i puntatori assegnati. Ogni variabile dinamica (memoria allocata sul heap) deve essere collegata a un puntatore. È difficile eliminare una variabile dinamica dopo che si separa dal suo puntatore / i. Ancora una volta, questo causa a perdita di memoria.
4: controlla i suggerimenti locali
Usa attentamente i puntatori locali. Quando si definisce un puntatore in una funzione, la variabile dinamica indica viene assegnata sul heap, non sullo stack. Rimarrà se non lo rimuoverà anche dopo che il programma è finito perdite di memoria.
5: Usa parentesi quadrate dopo eliminare attentamente
Prendi nota delle parentesi quadrate che seguono "eliminare". Per liberare un singolo elemento, usa Elimina da solo. Per rilasciare un array di heap, utilizzare Elimina [] racchiuso tra parentesi quadrate.
Come evitare le perdite di memoria?
Programma per evitare perdite di memoria
Per esempio:
#includere
#includere
Utilizzo dello spazio dei nomi std;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
cout<
int main ()
func_to_handle_mem_leak ();
restituzione 0;
IL Pointer nel programma sopra non viene eliminato dopo la sua allocazione. Questo provoca il perdita di memoria Nel codice C ++ sopra.
#includere
#includere
Utilizzo dello spazio dei nomi std;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
cout<eliminare (PTR);
int main ()
func_to_handle_mem_leak ();
restituzione 0;
In questo codice, stiamo eliminando quindi il puntatore nella funzione definita dall'utente perdita di memoria è evitato.
Produzione
Conclusione
Perdite di memoria All'interno di un programma può avere risultati dannosi se il programma è piccolo o grande. Risolvere perdite di memoria, Strumenti di analisi statica, strumenti diagnostici e strumenti di debug sono parte integrante nella ricerca e nella risoluzione del problema. Pertanto, il codice o i progetti C ++ devono essere regolarmente esaminati e analizzati per rilevare qualsiasi perdite di memoria, Utilizzando gli strumenti e le tecniche sopra, è possibile mitigare le perdite di memoria in un codice C ++.