Cosa significano le perdite soppresse in Valgrind?

Ho sviluppato un’implementazione pura C delle liste FIFO (code) nei file fifo.h e fifo.c , e ho scritto un test testfifo.c che compilo a ./bin/testfifo . La struttura del nodo è definita in list.h

Eseguo il mio programma attraverso Valgrind su OS X 10.6 in questo modo

 valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

e ottieni il seguente risultato

 ==54688== Memcheck, a memory error detector ==54688== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==54688== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==54688== Command: bin/testfifo ==54688== --54688-- bin/testfifo: --54688-- dSYM directory is missing; consider using --dsymutil=yes ==54688== ==54688== HEAP SUMMARY: ==54688== in use at exit: 88 bytes in 1 blocks ==54688== total heap usage: 11 allocs, 10 frees, 248 bytes allocated ==54688== ==54688== LEAK SUMMARY: ==54688== definitely lost: 0 bytes in 0 blocks ==54688== indirectly lost: 0 bytes in 0 blocks ==54688== possibly lost: 0 bytes in 0 blocks ==54688== still reachable: 0 bytes in 0 blocks ==54688== suppressed: 88 bytes in 1 blocks ==54688== ==54688== For counts of detected and suppressed errors, rerun with: -v ==54688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

Secondo il riassunto delle perdite, non ci sono perdite, ma mi chiedo ancora quali siano le perdite “soppresse”. Inoltre, il numero di alloc e free non corrisponde, e quindi non sono sicuro se ci sono perdite o no.

—-MODIFICARE—-

In esecuzione

 valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo 

su OS X 10.6 produce un output abbastanza lungo e confuso, ma ho eseguito

 valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

su una macchina Linux ha ottenuto questo risultato:

 ==32688== Memcheck, a memory error detector ==32688== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==32688== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info ==32688== Command: bin/testfifo ==32688== ==32688== ==32688== HEAP SUMMARY: ==32688== in use at exit: 0 bytes in 0 blocks ==32688== total heap usage: 10 allocs, 10 frees, 160 bytes allocated ==32688== ==32688== All heap blocks were freed -- no leaks are possible ==32688== ==32688== For counts of detected and suppressed errors, rerun with: -v ==32688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4) 

ora alloc’s e free corrispondono , quindi l’allocazione extra su OS X sembra essere dovuta ad alcune librerie di sistema, come è stato suggerito.

Ho eseguito lo stesso comando con l’opzione -v , al fine di rivelare i 4 errori soppressi, ma non ho avuto alcuna nuova informazione facilmente comprensibile.

Quelle sono perdite fuori dal tuo codice, in librerie (probabilmente condivise) o noti falsi positivi. L’esecuzione di valgrind con -v dovrebbe informarti sulle soppressioni utilizzate.