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 .\"*******************************************************************
16 .\" Japanese Version Copyright (c) 2002 Akihiro MOTOKI all rights reserved.
17 .\" Translated Thu 05 Dec 2002 by Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
18 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
19 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
21 .TH MALLOC_HOOK 3 2020\-11\-01 GNU "Linux Programmer's Manual"
23 __malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook,
24 __realloc_hook, __after_morecore_hook \- malloc デバッグ用の変数
27 \fB#include <malloc.h>\fP
29 \fBvoid *(*__malloc_hook)(size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
31 \fBvoid *(*__realloc_hook)(void *\fP\fIptr\fP\fB, size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
33 \fBvoid *(*__memalign_hook)(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB,\fP
34 \fB const void *\fP\fIcaller\fP\fB);\fP
36 \fBvoid (*__free_hook)(void *\fP\fIptr\fP\fB, const void *\fP\fIcaller\fP\fB);\fP
38 \fBvoid (*__malloc_initialize_hook)(void);\fP
40 \fBvoid (*__after_morecore_hook)(void);\fP
43 GNU C ライブラリでは、適切なフック関数 (hook function) を指定することで \fBmalloc\fP(3), \fBrealloc\fP(3),
44 \fBfree\fP(3) の動作を変更することができる。例えば、動的にメモリー割り当てを行う プログラムのデバッグにこれらのフックを使うことができる。
46 変数 \fB__malloc_initialize_hook\fP は malloc の実装が初期化される際に一度だけ呼ばれる関数へのポインターである。
47 この変数は書き換え可能 (weak) であり、アプリケーション内で 以下のような定義で上書きできる:
51 void (*__malloc_initialize_hook)(void) = my_init_hook;
55 なお、関数 \fImy_init_hook\fP() で全てのフックの初期化をすることができる。
57 \fB__malloc_hook\fP, \fB__realloc_hook\fP, \fB__memalign_hook\fP, \fB__free_hook\fP
58 で指される 4 つの関数は、各々 \fBmalloc\fP(3), \fBrealloc\fP(3), \fBmemalign\fP(3), \fBfree\fP(3)
59 とよく似たプロトタイプを持っているが、 一番最後の引き数 \fIcaller\fP をとる点が異なる。 引き数 \fIcaller\fP には、
60 \fBmalloc\fP(3) などの呼び出し元 (caller) のアドレスが格納される。
62 変数 \fB__after_morecore_hook\fP は、領域の追加要求があり \fBsbrk\fP(2)
63 が呼ばれた後で毎回呼び出される関数へのポインターである。
67 .\" https://bugzilla.redhat.com/show_bug.cgi?id=450187
68 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=9957
69 The use of these hook functions is not safe in multithreaded programs, and
70 they are now deprecated. From glibc 2.24 onwards, the
71 \fB__malloc_initialize_hook\fP variable has been removed from the API.
72 Programmers should instead preempt calls to the relevant functions by
73 defining and exporting functions such as "malloc" and "free".
75 これらの変数の使い方の簡単な例を以下に示す。
81 /* 使おうとするフックのプロトタイプ宣言 */
82 static void my_init_hook(void);
83 static void *my_malloc_hook(size_t, const void *);
85 /* 元々のフックを保存するための変数 */
86 static void *(*old_malloc_hook)(size_t, const void *);
88 /* C ライブラリから呼ばれる初期化フックを上書きする */
89 void (*__malloc_initialize_hook) (void) = my_init_hook;
94 old_malloc_hook = __malloc_hook;
95 __malloc_hook = my_malloc_hook;
99 my_malloc_hook(size_t size, const void *caller)
104 __malloc_hook = old_malloc_hook;
106 /* malloc の再帰的呼び出し */
107 result = malloc(size);
109 /* 現在設定されているフック (underlying hook) を保存する */
110 old_malloc_hook = __malloc_hook;
112 /* printf() might call malloc(), so protect it too. */
113 printf("malloc(%zu) called from %p returns %p\en",
114 size, caller, result);
116 /* ユーザーが使おうとするフックを再設定する */
117 __malloc_hook = my_malloc_hook;
123 \fBmallinfo\fP(3), \fBmalloc\fP(3), \fBmcheck\fP(3), \fBmtrace\fP(3)
125 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
126 \%https://www.kernel.org/doc/man\-pages/ に書かれている。