Si vous developpez en C ou C++, vous vous etes un jour ou l’autre confronté a des problemes liés a la géstion de la mémoire par vos applications et vous connaissez surement l’outil de profilage de la mémoire Valgrind (http://valgrind.org/). L’installation sous un Linux de valgrind est assez simple(apt-get install valgrind, pour ubuntu ou debian), par contre sous Mac OS X les choses ne sont pas si simples!
Voici donc la procédure que j’ai utilisé pour installer Valgrind sous Snow Leopard.

Récuperer les sources: pour cela placer vous dans un folder de votre choix (VALGRIND) par exemple:
mymac:Desktop Tarek$ mkdir VALGRIND mymac:Desktop Tarek$ cd VALGRIND/ mymac:VALGRIND Tarek$ svn co svn://svn.valgrind.org/valgrind/tags/VALGRIND_3_5_0 valgrind
Le dossier ainsi crée contient alors le folder valgrind.

On récupere le patch de Greg Parker a partir du site KDE:
curl http://bugsfiles.kde.org/attachment.cgi?id=36999 > 10.6.patch
on déplace le patch vers le dossier valgrind:
mymac:VALGRIND Tarek$ mv 10.6.patch ./valgrind

On applique ensuite le patch:
mymac:VALGRIND Tarek$ cd valgrind mymac:valgrind Tarek$ patch -p0 < 10.6.patch
Ensuite pour compiler (en mode 32 bits)
mymac:valgrind Tarek$ ./autogen.sh mymac:valgrind Tarek$ ./configure mymac:valgrind Tarek$ make
Pour le mode (64 bits):
mymac:valgrind Tarek$ ./autogen.sh mymac:valgrind Tarek$ ./configure --build=amd64-darwin mymac:valgrind Tarek$ make
et on install :
mymac:valgrind Tarek$ sudo make install
et apres on aura droit a ca:
mymac:Desktop Tarek$ which valgrind /usr/local/bin/valgrind

Pour tester valgrind, on crée un petit fichier c, test.c:
#include <stdio.h> #include <stdlib.h> int main() { char * t = malloc(1024); char * w = "TAREK"; t = w; return 0; }
On compile et on lance valgrind ensuite:
mymac:Desktop Tarek$ gcc -arch i386 test.c mymac:Desktop Tarek$ valgrind --leak-check=full ./a.out ==4660== Memcheck, a memory error detector ==4660== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. ==4660== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info ==4660== Command: ./a.out ==4660== --4660-- ./a.out: --4660-- dSYM directory is missing; consider using --dsymutil=yes ==4660== ==4660== HEAP SUMMARY: ==4660== in use at exit: 1,344 bytes in 8 blocks ==4660== total heap usage: 8 allocs, 0 frees, 1,344 bytes allocated ==4660== ==4660== 1,024 bytes in 1 blocks are definitely lost in loss record 4 of 4 ==4660== at 0xF666: malloc (vg_replace_malloc.c:195) ==4660== by 0x1F5E: main (in ./a.out) ==4660== ==4660== LEAK SUMMARY: ==4660== definitely lost: 1,024 bytes in 1 blocks ==4660== indirectly lost: 0 bytes in 0 blocks ==4660== possibly lost: 0 bytes in 0 blocks ==4660== still reachable: 320 bytes in 7 blocks ==4660== suppressed: 0 bytes in 0 blocks ==4660== Reachable blocks (those to which a pointer was found) are not shown. ==4660== To see them, rerun with: --leak-check=full --show-reachable=yes ==4660== ==4660== For counts of detected and suppressed errors, rerun with: -v ==4660== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Pour aller plus loin avec valgrind, je vous conseil un article de Linux Mag:
http://www.unixgarden.com/index.php/administration-systeme/corriger-votre-utilisation-memoire-avec-valgrind
Bonjour , merci pour le tuto mais j ‘ai un petit soucis quand j’utilise valgrind sur mon mac, même s’y je ne fait pas d’allocation cela me marque
1 alloc , 0 frees , XXX bytes allocated
Donc je voudrais savoir comment régler le petit souci car c’est un peu embêtant
Merci d’avance
Bonjour, désolé pour le retard, est ce que tu peux poster ton code et l’output.