Loading

NOM

       __malloc_hook,  __malloc_initialize_hook, __memalign_hook, __free_hook,
       __realloc_hook,  __after_morecore_hook  -  Variables  de  débogage   de
       malloc.

SYNOPSIS

       #include <malloc.h>

       void *(*__malloc_hook)(size_t size, const void *caller);

       void *(*__realloc_hook)(void *ptr, size_t size, const void *caller);

       void *(*__memalign_hook)(size_t alignment, size_t size,
                                const void *caller);

       void (*__free_hook)(void *ptr, const void *caller);

       void (*__malloc_initialize_hook)(void);

       void (*__after_morecore_hook)(void);

       La  bibliothèque  C  GNU  vous  permet  de  modifier le comportement de
       malloc(3), realloc(3) et free(3) en  fixant  les  points  d’entrée  des
       routines.  Vous  pouvez  utiliser ces points pour faciliter le débogage
       des programmes utilisant  des  allocations  de  mémoire  dynamique  par
       exemple.

       La  variable  __malloc_initialize_hook pointe vers une fonction qui est
       appelée une seule fois à l’initialisation de malloc. C’est une variable
       libre  qui  peut  être  modifiée par l’application avec une déclaration
       comme celle-ci :
           void (*__malloc_initialize_hook)(void) = my_init_hook;
       À   présent,   la   fonction   my_init_hook()   pourra   faire    toute
       l’initialisation des routines.

       Les   quatre  fonctions  pointées  par  __malloc_hook,  __realloc_hook,
       __memalign_hook et __free_hook ont des prototypes semblables à ceux des
       fonctions    malloc(3),    realloc(3),    memalign(3)    et    free(3),
       respectivement,  avec  un  argument  final  supplémentaire  caller  qui
       fournit l’adresse du code appelant malloc(3), etc.

       La  variable  __after_morecore_hook  pointe  sur  une  fonction qui est
       invoquée à chaque fois que sbrk(2) a  été  appelée  pour  augmenter  le
       segment de données.

CONFORMITÉ

       Ces fonctions sont des extensions GNU.

EXEMPLE

       Voici un court exemple d’utilisation de ces variables.

       #include <stdio.h>
       #include <malloc.h>

       /* Prototypes de nos routines */
       static void my_init_hook(void);
       static void *my_malloc_hook(size_t, const void *);

       /* Variables pour sauver la routine originale */
       static void *(*old_malloc_hook)(size_t, const void *);

       /* Écrasement de la routine d’initialisation glibc */
       void (*__malloc_initialize_hook) (void) = my_init_hook;

       static void
       my_init_hook(void)
       {
           old_malloc_hook = __malloc_hook;
           __malloc_hook = my_malloc_hook;
       }

       static void *
       my_malloc_hook(size_t size, const void *caller)
       {
           void *result;

           /* Replacer la routine originale */
           __malloc_hook = old_malloc_hook;

           /* Call recursively */
           result = malloc(size);

           /* Sauver la routine originale */
           old_malloc_hook = __malloc_hook;

           /* printf() might call malloc(), so protect it too. */
           printf("malloc(%u) called from %p returns %p\n",
                   (unsigned int) size, caller, result);

           /* Replacer notre routine */
           __malloc_hook = my_malloc_hook;

           return result;
       }

VOIR AUSSI

       mallinfo(3), malloc(3), mcheck(3), mtrace(3)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».