valgrind mac os mem fuite

Aujourd’hui, j’ai installé Valgrind sur mon Mac OS X 10.6 et j’ai essayé de le tester. Et il s’est avéré être des memory leaks étranges dans le système. Ce que j’ai fait était de créer un simple fichier c qui récupère de la mémoire et le libère immédiatement. Quand j’ai couru Valgrind, ça a montré quelque chose comme ça

Realfrees-MacBook-Pro:C Realfree$ valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./a.out ==2621== Memcheck, a memory error detector ==2621== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==2621== Using Valgrind-3.6.0 and LibVEX; rerun with -h for copyright info ==2621== Command: ./a.out ==2621== --2621-- ./a.out: --2621-- dSYM directory is missing; consider using --dsymutil=yes ==2621== ==2621== HEAP SUMMARY: ==2621== in use at exit: 88 bytes in 1 blocks ==2621== total heap usage: 2 allocs, 1 frees, 92 bytes allocated ==2621== ==2621== 88 bytes in 1 blocks are still reachable in loss record 1 of 1 ==2621== at 0x100010915: malloc (vg_replace_malloc.c:236) ==2621== by 0x1000260EB: get_or_create_key_element (in /usr/lib/libSystem.B.dylib) ==2621== by 0x100026008: _keymgr_get_and_lock_processwide_ptr_2 (in /usr/lib/libSystem.B.dylib) ==2621== by 0x100025FCF: __keymgr_initializer (in /usr/lib/libSystem.B.dylib) ==2621== by 0x1000245E7: libSystem_initializer (in /usr/lib/libSystem.B.dylib) ==2621== by 0x7FFF5FC0D4FF: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) ==2621== by 0x7FFF5FC0BCEB: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int) (in /usr/lib/dyld) ==2621== by 0x7FFF5FC0BC9C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int) (in /usr/lib/dyld) ==2621== by 0x7FFF5FC0BDA5: ImageLoader::runInitializers(ImageLoader::LinkContext const&) (in /usr/lib/dyld) ==2621== by 0x7FFF5FC020EE: dyld::initializeMainExecutable() (in /usr/lib/dyld) ==2621== by 0x7FFF5FC06980: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**) (in /usr/lib/dyld) ==2621== by 0x7FFF5FC016D1: dyldbootstrap::start(macho_header const*, int, char const**, long) (in /usr/lib/dyld) ==2621== ==2621== LEAK SUMMARY: ==2621== definitely lost: 0 bytes in 0 blocks ==2621== indirectly lost: 0 bytes in 0 blocks ==2621== possibly lost: 0 bytes in 0 blocks ==2621== still reachable: 88 bytes in 1 blocks ==2621== suppressed: 0 bytes in 0 blocks ==2621== ==2621== For counts of detected and suppressed errors, rerun with: -v ==2621== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

où une certaine quantité de mémoire est encore accessible. Une idée pour régler le problème? ou c’est normal pour mac

PS J’ai couru valgrind avec la commande ls -l, et il a montré un tas de bloc qui étaient toujours accessibles. Je ne suis pas sûr que ce soit un comportement normal sur mac. Voici le résultat de la ligne de commande “valgrind –tool = memcheck ls -l”:

 ==2734== ==2734== HEAP SUMMARY: ==2734== in use at exit: 118,331 bytes in 52 blocks ==2734== total heap usage: 1,253 allocs, 1,201 frees, 214,242 bytes allocated ==2734== ==2734== LEAK SUMMARY: ==2734== definitely lost: 0 bytes in 0 blocks ==2734== indirectly lost: 0 bytes in 0 blocks ==2734== possibly lost: 0 bytes in 0 blocks ==2734== still reachable: 118,331 bytes in 52 blocks ==2734== suppressed: 0 bytes in 0 blocks ==2734== Rerun with --leak-check=full to see details of leaked memory ==2734== ==2734== For counts of detected and suppressed errors, rerun with: -v ==2734== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

Vous devrez peut-être utiliser un fichier de suppression valgrind pour Mac . On dirait qu’une mémoire à l’échelle du processus est allouée par non libérée à la fin du processus. Essayez avec valgrind --suppressions= .

Et pour Mac OS X Lion, vous devez utiliser ce fichier de suppression: https://github.com/svn2github/valgrind/blob/master/darwin11.supp.