Come trovare una perdita di memoria in Linux

April 22

Come trovare una perdita di memoria in Linux


A differenza di nuovi linguaggi di programmazione come Java e Python, linguaggi di programmazione come C richiedono al programmatore di gestire la propria memoria. C fornisce servizi a richiesta di memoria libera e tornare al sistema operativo, ma niente di più. Perché linguaggi come C offrono alcun meccanismo di garbage collection per pulire gli oggetti che non sono più in uso, il programmatore deve essere vigile e rimuovere gli oggetti quando sono più necessari. Se un programma non si libera dei suoi oggetti inutilizzati, la perdita di memoria risultante può causare il blocco del sistema operativo.

istruzione

1 Installare la suite di debug "valgrind".

Il pacchetto valgrind è liberamente disponibile su tutte le distribuzioni Linux. Per installarlo sulle distribuzioni derivate da Debian come Ubuntu, digitare "sudo apt-get install valgrind." Su RedHat o Fedora, digitare "sudo yum install valgrind."

2 Compilare il programma con i simboli di debug.

Il compilatore più comune per i programmi C su sistemi Linux è gcc. Utilizzare il flag "-g" per istruire gcc per includere i simboli di debug nel binario che crea. (Simboli di debug sono necessari per debugger come Valgrind per riferirsi a problemi specifici nel codice).

Se si dispone di un programma C denominato "memoryhog.c." per esempio, si potrebbe compilarlo con questo comando: gcc -g memoryhog.c

3 Eseguire binario del programma attraverso valgrind.

A meno che non gli si dice altrimenti, gcc sarà un nome al programma "a.out". Per eseguire il binario chiamato "a.out" utilizzando valgrind, digitare il seguente comando: valgrind --leak-check = pieno --show-raggiungibile = yes ./a.out

4 Controllare l'output di Valgrind.

Se tutte le perdite di memoria sono stati risolti, valgrind riporta "Tutti i blocchi heap sono stati liberati - perdite sono possibili."

Se eventuali perdite di memoria sono presenti, Valgrind elenca il numero di riga in cui viene creato la perdita.

Consigli e avvertenze

  • Se siete disposti a installare ganci memoria di debug nel codice, quindi l'utilità mtrace può fornire funzioni simili a Valgrind.
  • Le perdite di memoria costituiscono una sola classe di bug di programmazione. Il codice può essere esente da perdite di memoria, pur affetti da problemi di prestazioni o vulnerabilità di sicurezza.