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