Repository 32bit  Forum
Repository 64bit  Wiki

Memory leak

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Memory leak

Messaggioda Dani » sab mar 01, 2008 19:20

Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Memory leak

Messaggioda conraid » sab mar 01, 2008 19:23

Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?


http://www.slacky.eu/index.php?option=c ... &Itemid=56
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: Memory leak

Messaggioda Dani » sab mar 01, 2008 19:42

L'ho avviato usando --leak-check=full --log-file=log e nel sommario esce:

Codice: Seleziona tutto
==5734== LEAK SUMMARY:
==5734==    definitely lost: 3,013,859 bytes in 9,159 blocks.
==5734==    indirectly lost: 37,719,580 bytes in 206,773 blocks.
==5734==      possibly lost: 12,620 bytes in 14 blocks.
==5734==    still reachable: 168,142 bytes in 668 blocks.
==5734==         suppressed: 0 bytes in 0 blocks.
==5734== Reachable blocks (those to which a pointer was found) are not shown.
==5734== To see them, rerun with: --leak-check=full --show-reachable=yes


Non capisco come usare queste informazioni, e nemmeno le altre salvate nel file di log a dir la verità :oops:
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Memory leak

Messaggioda targzeta » sab mar 01, 2008 20:35

Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?

Se il codice è C o C++ puoi usare la libreria mtrace (3) poi usi /usr/bin/mtrace per capire dove hai dimenticato di deallocare.

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6186
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Memory leak

Messaggioda conraid » sab mar 01, 2008 23:06

Dani ha scritto:Non capisco come usare queste informazioni, e nemmeno le altre salvate nel file di log a dir la verità :oops:


ehm... non sono un programmatore, ti ho solo suggerito un software che sento sempre nominare come "il tool" per certe cose. Ma non lo conosco
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: Memory leak

Messaggioda Dani » lun mar 03, 2008 2:24

spina ha scritto:
Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?

Se il codice è C o C++ puoi usare la libreria mtrace (3) poi usi /usr/bin/mtrace per capire dove hai dimenticato di deallocare.

Spina


Ok usando mtrace ecco una parte del risultato:

Codice: Seleziona tutto
dani[]$ mtrace programma log

Memory not freed:
-----------------
   Address     Size     Caller
0x08056378      0xa  at 0xb7df4f90
0x08056388    0x100  at 0xb7e34bb3
0x08056490     0x38  at 0xb7e29ef2
0x080564d0      0x4  at 0xb7e27796
0x080564e0      0x4  at 0xb7e27796
0x08056540     0x40  at 0xb7e33619
0x08056588      0x4  at 0xb7e29075
0x08056598     0x8c  at 0xb7e34505
0x08056628    0x1c8  at 0xb7e33217
0x080567f8    0x300  at 0xb7e3325d
0x08056b00     0x38  at 0xb7e29ef2
[...]


L'elenco è molto piu' lungo, ma a parte questo come devo interpretare questi dati ?
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Memory leak

Messaggioda targzeta » lun mar 03, 2008 9:45

Dani ha scritto:...L'elenco è molto piu' lungo, ma a parte questo come devo interpretare questi dati ?


Che non sei un bravo programmatore :). comunque, guarda qui (ricordati di compilare il programma con "-g"):
http://www.gnu.org/software/libtool/man ... races.html

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6186
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Memory leak

Messaggioda Dani » lun mar 03, 2008 10:54

spina ha scritto:Che non sei un bravo programmatore :). comunque, guarda qui (ricordati di compilare il programma con "-g"):
http://www.gnu.org/software/libtool/man ... races.html

Spina


Ho già visto quel link, ed il programma lo compilo usando l'opzione -g di gcc !
Inizialmente assieme ai problemi di memoria mi segnalava anche il file sorgente e la riga corrispondente, ma un volta corretti questi errori mi sono apparsi solamente indirizzi come sopra, e nient'altro :(
Ultima modifica di Dani il lun mar 03, 2008 13:59, modificato 1 volta in totale.
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Memory leak

Messaggioda targzeta » lun mar 03, 2008 11:03

Dani ha scritto:Ho già visto quel link, ed il programma lo compilo usando l'opzione -g di gcc !
Inizialmente assieme ai problemi di memoria mi segnalava anche il file sorgente e la riga corrispondente, ma un volta corretti questi errori mi sono appariti solamente indirizzi come sopra, e nient'altro :(


Allora molto probabilmente gli indirizzi appartengono ad una libreria che usi (e che quindi non è compilata con -g). Se fai un pacchettino del sorgente mandamelo che gli do un occhiata <spina80@freemail.it>.

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6186
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Memory leak

Messaggioda Dani » lun mar 03, 2008 13:49

Finalmente ho capito dove stava il grosso baco ! Dopo una funzione che effettuava qualche chiamata a regcomp() e regexec() anzichè dare un regfree() per ogni chiamata, ne davo uno solo all'uscita della funzione !
Infatti richiamando la funzione incriminata un migliaio di volte, la ram andava velocemente a farsi benedire. Ora invece per quante volte possa chiamare la funzione il consumo di ram è quasi irrisorio (un paio di mega, il codice è ancora da ottimizzare).

Comunque sia QUI trovi i sorgenti del programma, è la versione di sviluppo quindi non è testata in tutte le funzioni. Se ci butti un occhio e tiri fuori qualche consiglio ovviamente non puo' che farmi piacere :)
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron