Provided by: manpages-ro-dev_4.27.0-1_all bug

__malloc_hook(3)                            Library Functions Manual                            __malloc_hook(3)

NUME

       __malloc_hook,      __malloc_initialize_hook,      __memalign_hook,      __free_hook,     __realloc_hook,
       __after_morecore_hook - variabile de depanare malloc (DEPRECIATE)

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <malloc.h>

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

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

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

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

       void (*__malloc_initialize_hook)(void);

       void (*volatile __after_morecore_hook)(void);

DESCRIERE

       Biblioteca GNU C vă permite să modificați  comportamentul  lui  malloc(3),  realloc(3)  și  free(3)  prin
       specificarea  unor  funcții  cârlig  corespunzătoare.  Puteți utiliza aceste cârlige pentru a vă ajuta la
       depanarea programelor care utilizează alocarea dinamică a memoriei, de exemplu.

       Variabila __malloc_initialize_hook indică o funcție care este apelată o singură  dată  atunci  când  este
       inițializată  implementarea  malloc. Aceasta este o variabilă slabă, astfel încât poate fi suprascrisă în
       aplicație cu o definiție ca cea de mai jos:

           void (*__malloc_initialize_hook)(void) = my_init_hook;

       Acum, funcția my_init_hook() poate face inițializarea tuturor cârligelor.

       Cele patru funcții indicate de __malloc_hook, __realloc_hook, __memalign_hook, __free_hook au un prototip
       asemănător funcțiilor malloc(3), realloc(3), memalign(3), free(3),  respectiv  memalign(3),  cu  excepția
       faptului că acestea au un argument final caller care oferă adresa apelantului lui malloc(3), etc.

       Variabila  __after_morecore_hook indică o funcție care este apelată de fiecare dată după ce lui sbrk(2) i
       s-a cerut mai multă memorie.

STANDARDE

       GNU.

NOTE

       Utilizarea acestor funcții cârlig nu este sigură în programele cu mai multe fire, iar acum  acestea  sunt
       depreciate.  Începând  cu  glibc  2.24,  variabila __malloc_initialize_hook a fost eliminată din API, iar
       începând cu glibc 2.34, toate variabilele cârlig au fost eliminate din API. În schimb,  programatorii  ar
       trebui  să  preîntâmpine apelurile către funcțiile relevante prin definirea și exportul malloc(), free(),
       realloc() și calloc().

EXEMPLE

       Iată un scurt exemplu de utilizare a acestor variabile.

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

       /* Prototipurile pentru cârligele noastre */
       static void my_init_hook(void);
       static void *my_malloc_hook(size_t, const void *);

       /* Variabile pentru a salva cârligele originale */
       static void *(*old_malloc_hook)(size_t, const void *);

       /* Suprascrie cârligul de inițializare din biblioteca C */
       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;

           /* Restabilește toate cârligele vechi */
           __malloc_hook = old_malloc_hook;

           /* Apel recursiv */
           result = malloc(size);

           /* Salvează cârligele de bază */
           old_malloc_hook = __malloc_hook;

           /* printf() might call malloc(), so protect it too */
           printf("malloc(%zu) apelat din %p returnează %p\n",
                   size, caller, result);

           /* Restabilește propriile noastre cârlige*/
           __malloc_hook = my_malloc_hook;

           return result;
       }

CONSULTAȚI ȘI

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

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                 __malloc_hook(3)