__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 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 va permite sa modificai comportamentul lui malloc(3), realloc(3) i free(3) prin specificarea unor funcii carlig corespunzatoare. Putei utiliza aceste carlige pentru a va ajuta la depanarea programelor care utilizeaza alocarea dinamica a memoriei, de exemplu. Variabila __malloc_initialize_hook indica o funcie care este apelata o singura data atunci cand este iniializata implementarea malloc. Aceasta este o variabila slaba, astfel incat poate fi suprascrisa in aplicaie cu o definiie ca cea de mai jos: void (*__malloc_initialize_hook)(void) = my_init_hook; Acum, funcia my_init_hook() poate face iniializarea tuturor carligelor. Cele patru funcii indicate de __malloc_hook, __realloc_hook, __memalign_hook, __free_hook au un prototip asemanator funciilor malloc(3), realloc(3), memalign(3), free(3), respectiv memalign(3), cu excepia faptului ca acestea au un argument final caller care ofera adresa apelantului lui malloc(3), etc. Variabila __after_morecore_hook indica o funcie care este apelata de fiecare data dupa ce lui sbrk(2) i s-a cerut mai multa memorie. STANDARDE GNU. NOTE Utilizarea acestor funcii carlig nu este sigura in programele cu mai multe fire, iar acum acestea sunt depreciate. Incepand cu glibc 2.24, variabila __malloc_initialize_hook a fost eliminata din API, iar incepand cu glibc 2.34, toate variabilele carlig au fost eliminate din API. In schimb, programatorii ar trebui sa preintampine apelurile catre funciile relevante prin definirea i exportul malloc(), free(), realloc() i calloc(). EXEMPLE Iata un scurt exemplu de utilizare a acestor variabile. #include #include /* Prototipurile pentru carligele noastre */ static void my_init_hook(void); static void *my_malloc_hook(size_t, const void *); /* Variabile pentru a salva carligele originale */ static void *(*old_malloc_hook)(size_t, const void *); /* Suprascrie carligul de iniializare 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; /* Restabilete toate carligele vechi */ __malloc_hook = old_malloc_hook; /* Apel recursiv */ result = malloc(size); /* Salveaza carligele de baza */ old_malloc_hook = __malloc_hook; /* printf() might call malloc(), so protect it too */ printf("malloc(%zu) apelat din %p returneaza %p\n", size, caller, result); /* Restabilete propriile noastre carlige*/ __malloc_hook = my_malloc_hook; return result; } CONSULTAI I mallinfo(3), malloc(3), mcheck(3), mtrace(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 __malloc_hook(3)