Zingus J. Rinkle wrote:
Roberto A. Foglietta wrote:
Ciao,
sto lavorando su dillo il browser gtk/c. Purtroppo ho scoperto che ha un memory leak e si perde 4Kb ad ogni reload. Vorrei usarlo come visualizzatore di orari dei treni e degli autobus ma questo significa che 10 istanze del programma con un reload ogni 5 secondi si consumano circa ~30Mb all'ora. Definitivamente eccessivo.
Dillo ha 42 mila righe di codice e non sono riuscito a trovare il bug. Avete idea di come fare un log di tutti i malloc/free che il programma fa? Avete idea di qualche garbage collector in C che possa usare all'interno di un progetto così complesso senza riscriverlo tutto?
A parte, l'ovvio "strace -e malloc,calloc,free" c'e` una serie di tool che overloadano o sostituiscono in qualche modo le calloc e le malloc di un programma con delle versioni che loggano duro l'occupazione di memoria (alcuni credo abbiano anche tool per rappresentare poi su di un grafico i dati). xmalloc ed electric fence i primi due nomi che mi vengono in mente. Mai provato ad usarli, pero`, principalmente perche` spesso richiedono di pasticciare col codice per incastrarceli (dunque tu provali e sappimi dire se funzano :-)
Ah, forse anche gprof ha delle opzioni per tracciare la memoria...
[roberto@wsraf src]$ strace -e malloc,calloc,free ./dillo strace: invalid system call `malloc' [roberto@wsraf src]$ man strace [roberto@wsraf src]$ strace -e malloc,calloc,free ./dillo strace: invalid system call `malloc' [roberto@wsraf src]$ strace -e calloc,free ./dillo strace: invalid system call `calloc' [roberto@wsraf src]$ strace -e free ./dillo strace: invalid system call `free'