File: malloc_hook.3

package info (click to toggle)
manpages-ja 0.5.0.0.20080615-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 20,508 kB
  • ctags: 1
  • sloc: sh: 13,690; perl: 157; makefile: 114
file content (133 lines) | stat: -rw-r--r-- 3,461 bytes parent folder | download
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
133
.\" 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
.\"
.\" Japanese Version Copyright (c) 2002 Akihiro MOTOKI all rights reserved.
.\" Translated Thu 05 Dec 2002 by Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
.\"
.TH MALLOC_HOOK 3 2002-07-20 "GNU" "Linux Programmer's Manual"
.SH ̾
__malloc_hook, __malloc_initialize_hook,
__memalign_hook, __free_hook, __realloc_hook,
__after_morecore_hook \- malloc ǥХåѤѿ
.SH 
.nf
.B "#include <malloc.h>"
.sp
.BI "void *(*__malloc_hook)(size_t " size ", const void *" caller );
.sp
.BI "void *(*__realloc_hook)(void *" ptr ", size_t " size \
", const void *" caller );
.sp
.BI "void *(*__memalign_hook)(size_t " alignment ", size_t " size ,
.BI "                         const void *" caller );
.sp
.BI "void (*__free_hook)(void *" ptr ", const void *" caller );
.sp
.B "void (*__malloc_initialize_hook)(void);"
.sp
.B "void (*__after_morecore_hook)(void);"
.fi
.SH 
GNU C 饤֥ǤϡŬڤʥեåؿ (hook function) ꤹ뤳Ȥ
.BR malloc (3),
.BR realloc (3),
.BR free (3)
ưѹ뤳ȤǤ롣㤨СưŪ˥ƤԤ
ץΥǥХåˤΥեåȤȤǤ롣
.LP
ѿ
.B __malloc_initialize_hook
 malloc μݤ˰٤ƤФؿؤΥݥ󥿤Ǥ롣
ѿϽ񤭴ǽ (weak) Ǥꡢץꥱ
ʲΤ褦Ǿ񤭤Ǥ:

.nf
    void (*__malloc_initialize_hook)(void) = my_init_hook;
.fi

ʤؿ
.IR my_init_hook ()
ƤΥեåν򤹤뤳ȤǤ롣
.LP
.BR __malloc_hook ,
.BR __realloc_hook ,
.BR __memalign_hook ,
.B __free_hook
ǻؤ 4 Ĥδؿϡơ
.BR malloc (3),
.BR realloc (3),
.BR memalign (3),
.BR free (3)
Ȥ褯ץȥפäƤ뤬
ֺǸΰ
.I caller
Ȥۤʤ롣

.I caller
ˤϡ
.BR malloc (3)
ʤɤθƤӽФ (caller) Υɥ쥹Ǽ롣
.LP
ѿ
.B __after_morecore_hook
ϡΰɲ׵᤬
.BR sbrk (2)
ƤФ줿ƤӽФؿؤΥݥ󥿤Ǥ롣
.SH 
δؿ GNU ˤĥǤ롣
.SH 
ѿλȤδñʲ˼
.sp
.nf
#include <stdio.h>
#include <malloc.h>

/* ȤȤեåΥץȥ */
static void my_init_hook(void);
static void *my_malloc_hook(size_t, const void *);

/* Υեå¸뤿ѿ */
static void *(*old_malloc_hook)(size_t, const void *);

/* 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;

    /* Υեå᤹ */
    __malloc_hook = old_malloc_hook;

    /* malloc κƵŪƤӽФ */
    result = malloc(size);

    /* ꤵƤեå (underlying hook) ¸ */
    old_malloc_hook = __malloc_hook;

    /* printf()  malloc() ƤӽФǽΤ
        Ǥ⥬ɤԤ (ΥեåΤޤޤˤƤ) */
    printf("malloc(%u) called from %p returns %p\\n",
            (unsigned int) size, caller, result);

    /* 桼ȤȤեåꤹ */
    __malloc_hook = my_malloc_hook;

    return result;
}
.fi
.SH Ϣ
.BR mallinfo (3),
.BR malloc (3),
.BR mcheck (3),
.BR mtrace (3)