focal (3) malloc_hook.3.gz

Provided by: manpages-fr-dev_3.65d1p1-1_all bug

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);

DESCRIPTION

       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.

NOTES

       L'utilisation  de  ces  fonctions  de crochet n'est pas sûre dans des programmes multiprocessus, et elles
       sont dorénavant dépréciées. Les programmeurs devraient à la place préempter les appels à ces fonctions en
       définissant et exportant des fonctions telles que « malloc » et « free ».

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.65 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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Florentin  Duneau  et  l'équipe  francophone de traduction de
       Debian (2006-2009).

       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> ».