File: malloc_hook.3

package info (click to toggle)
manpages-es 1.55-9
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 7,468 kB
  • ctags: 6
  • sloc: sh: 1,629; makefile: 64
file content (132 lines) | stat: -rw-r--r-- 3,577 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
.\" Distributed under GPL
.\" Heavily based on glibc documentation
.\" Polished, added docs, removed glibc doc bug, 2002-07-20, aeb
.\"
.\" Traducido por Juan Piernas <piernas en ditec.um.es> el 21-enero-2005
.\"
.TH MALLOC_HOOK 3 "20 julio 2002" "GNU" "Manual del Programador de Linux"
.SH NOMBRE
__malloc_hook, __malloc_initialize_hook,
__memalign_hook, __free_hook, __realloc_hook, 
__after_morecore_hook \- variables de depuración de malloc
.SH SINOPSIS
.sp
.BR "#include <malloc.h>"
.sp
.BI "void *(*__malloc_hook)(size_t " size , 
.BI "const void *" caller );
.sp
.BI "void *(*__realloc_hook)(void *" ptr , 
.BI "size_t " size , 
.BI "const void *" caller );
.sp
.BI "void *(*__memalign_hook)(size_t " alignment ,
.BI "size_t " size ,
.BI "const void *" caller );
.sp
.BI "void (*__free_hook)(void *" ptr , 
.BI "const void *" caller );
.sp
.BI "void (*__malloc_initialize_hook)(void);"
.sp
.BI "void (*__after_morecore_hook)(void);"
.SH DESCRIPCIÓN
La biblioteca de C de GNU le permite modificar el comportamiento de
.IR malloc (),
.IR realloc ()
y
.IR free ()
especificando funciones de «enganche» (\fIhook\fP) adecuadas. Puede usar
estos enganches para que, por ejemplo, le ayuden a depurar
programas que usan asignaciones dinámicas de memoria.
.LP
La variable
.B __malloc_initialize_hook
apunta a una función que se invoca una única vez cuando se inicializa
la implementación de malloc. Esta es una varible normal, por lo que se
puede redefinir en una aplicación de forma parecida a la siguiente:
.br
.nf
    void (*__malloc_initialize_hook)(void) = my_init_hook;
.fi
.br
Ahora la función
.IR my_init_hook ()
puede hacer la inicialización de todos los enganches.
.LP
Las cuatro funciones apuntadas por
.BR __malloc_hook ,
.BR __realloc_hook ,
.B __memalign_hook
y
.BR __free_hook
tienen el mismo prototipo de las funciones
.IR malloc (),
.IR realloc (),
.IR memalign ()
y
.IR free (),
respectivamente, aunque tienen un argumento final adicional
.I caller
que proporciona la dirección del invocador de
.IR malloc (),
etc.
.LP
La variable
.B __after_morecore_hook
apunta a un función que se invoca cada vez que se pide a
.IR sbrk ()
más memoria.
.SH "EJEMPLO"
A continuación tiene un pequeño ejemplo de cómo usar estas
variables.
.sp
.nf
#include <stdio.h>
#include <malloc.h>
     
/* Prototipos para nuestros enganches.  */
static void my_init_hook(void);
static void *my_malloc_hook(size_t, const void *);

/* Variables para guardar los enganches originales. */
static void *(*old_malloc_hook)(size_t, const void *);
     
/* Redefinimos el enganche de inicialización de la biblioteca de 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;

    /* Restauramos todos los enganches originales */
    __malloc_hook = old_malloc_hook;

    /* Llamamos recursivamente a malloc */
    result = malloc (size);

    /* Guardamos los enganches originales */
    old_malloc_hook = __malloc_hook;

    /* `printf' podría llamar a `malloc', por lo que también hay que protegerla. */
    printf ("malloc(%u) invocada desde %p devuelve %p\\n",
        (unsigned int) size, caller, result);

    /* Restauramos nuestros enganches */
    __malloc_hook = my_malloc_hook;

    return result;
}
.fi
.SH "VÉASE TAMBIÉN"
.BR mallinfo (3), 
.BR malloc (3),
.BR mtrace (3),
.BR mcheck (3)