1 .\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
3 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
4 .\" Distributed under GPL
7 .\" Heavily based on glibc documentation
8 .\" Polished, added docs, removed glibc doc bug, 2002-07-20, aeb
10 .\"*******************************************************************
12 .\" This file was generated with po4a. Translate the source file.
14 .\"*******************************************************************
15 .TH MALLOC_HOOK 3 2010\-10\-13 GNU "Linux Programmer's Manual"
17 __malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook,
18 __realloc_hook, __after_morecore_hook \- malloc デバッグ用の変数
21 \fB#include <malloc.h>\fP
23 \fBvoid *(*__malloc_hook)(size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
25 \fBvoid *(*__realloc_hook)(void *\fP\fIptr\fP\fB, size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
27 \fBvoid *(*__memalign_hook)(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB,\fP
28 \fB const void *\fP\fIcaller\fP\fB);\fP
30 \fBvoid (*__free_hook)(void *\fP\fIptr\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
32 \fBvoid (*__malloc_initialize_hook)(void);\fP
34 \fBvoid (*__after_morecore_hook)(void);\fP
37 GNU C ライブラリでは、適切なフック関数 (hook function) を指定することで \fBmalloc\fP(3), \fBrealloc\fP(3),
38 \fBfree\fP(3) の動作を変更することができる。例えば、動的にメモリ割り当てを行う プログラムのデバッグにこれらのフックを使うことができる。
40 変数 \fB__malloc_initialize_hook\fP は malloc の実装が初期化される際に一度だけ呼ばれる関数へのポインタである。
41 この変数は書き換え可能 (weak) であり、アプリケーション内で 以下のような定義で上書きできる:
44 void (*__malloc_initialize_hook)(void) = my_init_hook;
47 なお、関数 \fImy_init_hook\fP() で全てのフックの初期化をすることができる。
49 \fB__malloc_hook\fP, \fB__realloc_hook\fP, \fB__memalign_hook\fP, \fB__free_hook\fP
50 で指される 4 つの関数は、各々 \fBmalloc\fP(3), \fBrealloc\fP(3), \fBmemalign\fP(3), \fBfree\fP(3)
51 とよく似たプロトタイプを持っているが、 一番最後の引き数 \fIcaller\fP をとる点が異なる。 引き数 \fIcaller\fP には、
52 \fBmalloc\fP(3) などの呼び出し元 (caller) のアドレスが格納される。
54 変数 \fB__after_morecore_hook\fP は、領域の追加要求があり \fBsbrk\fP(2)
55 が呼ばれた後で毎回呼び出される関数へのポインタである。
59 .\" https://bugzilla.redhat.com/show_bug.cgi?id=450187
60 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=9957
61 The use of these hook functions is not safe in multithreaded programs, and
62 they are now deprecated. Programmers should instead preempt calls to the
63 relevant functions by defining and exporting functions such as "malloc" and
66 これらの変数の使い方の簡単な例を以下に示す。
72 /* 使おうとするフックのプロトタイプ宣言 */
73 static void my_init_hook(void);
74 static void *my_malloc_hook(size_t, const void *);
76 /* 元々のフックを保存するための変数 */
77 static void *(*old_malloc_hook)(size_t, const void *);
79 /* C ライブラリから呼ばれる初期化フックを上書きする */
80 void (*__malloc_initialize_hook) (void) = my_init_hook;
85 old_malloc_hook = __malloc_hook;
86 __malloc_hook = my_malloc_hook;
90 my_malloc_hook(size_t size, const void *caller)
95 __malloc_hook = old_malloc_hook;
98 result = malloc(size);
100 /* 現在設定されているフック (underlying hook) を保存する */
101 old_malloc_hook = __malloc_hook;
103 /* printf() は malloc() を呼び出す可能性があるので
104 ここでもガードを行う (元々のフックのままにしておく) */
105 printf("malloc(%u) called from %p returns %p\en",
106 (unsigned int) size, caller, result);
108 /* ユーザが使おうとするフックを再設定する */
109 __malloc_hook = my_malloc_hook;
115 \fBmallinfo\fP(3), \fBmalloc\fP(3), \fBmcheck\fP(3), \fBmtrace\fP(3)
117 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
118 である。プロジェクトの説明とバグ報告に関する情報は
119 http://www.kernel.org/doc/man\-pages/ に書かれている。