OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / draft / man3 / malloc_hook.3
1 .\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
2 .\" Distributed under GPL
3 .\" Heavily based on glibc documentation
4 .\" Polished, added docs, removed glibc doc bug, 2002-07-20, aeb
5 .\"
6 .\" FIXME
7 .\" According to a Fedora downstream patch, malloc hooks are deprecated
8 .\" https://bugzilla.redhat.com/show_bug.cgi?id=450187
9 .\" Integrate this upstream?
10 .\"
11 .\" Japanese Version Copyright (c) 2002 Akihiro MOTOKI all rights reserved.
12 .\" Translated Thu 05 Dec 2002 by Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
13 .\"
14 .TH MALLOC_HOOK 3 2002-07-20 "GNU" "Linux Programmer's Manual"
15 .\"O .SH NAME
16 .SH 名前
17 .\"O __malloc_hook, __malloc_initialize_hook,
18 .\"O __memalign_hook, __free_hook, __realloc_hook,
19 .\"O __after_morecore_hook \- malloc debugging variables
20 __malloc_hook, __malloc_initialize_hook,
21 __memalign_hook, __free_hook, __realloc_hook,
22 __after_morecore_hook \- malloc デバッグ用の変数
23 .\"O .SH SYNOPSIS
24 .SH 書式
25 .nf
26 .B "#include <malloc.h>"
27 .sp
28 .BI "void *(*__malloc_hook)(size_t " size ", const void *" caller );
29 .sp
30 .BI "void *(*__realloc_hook)(void *" ptr ", size_t " size \
31 ", const void *" caller );
32 .sp
33 .BI "void *(*__memalign_hook)(size_t " alignment ", size_t " size ,
34 .BI "                         const void *" caller );
35 .sp
36 .BI "void (*__free_hook)(void *" ptr ", const void *" caller );
37 .sp
38 .B "void (*__malloc_initialize_hook)(void);"
39 .sp
40 .B "void (*__after_morecore_hook)(void);"
41 .fi
42 .\"O .SH DESCRIPTION
43 .SH 説明
44 .\"O The GNU C library lets you modify the behavior of
45 .\"O .BR malloc (3),
46 .\"O .BR realloc (3),
47 .\"O and
48 .\"O .BR free (3)
49 .\"O by specifying appropriate hook functions.
50 .\"O You can use these hooks
51 .\"O to help you debug programs that use dynamic memory allocation,
52 .\"O for example.
53 GNU C ライブラリでは、適切なフック関数 (hook function) を指定することで
54 .BR malloc (3),
55 .BR realloc (3),
56 .BR free (3)
57 の動作を変更することができる。例えば、動的にメモリ割り当てを行う
58 プログラムのデバッグにこれらのフックを使うことができる。
59 .LP
60 .\"O The variable
61 .\"O .B __malloc_initialize_hook
62 .\"O points at a function that is called once when the malloc implementation
63 .\"O is initialized.
64 .\"O This is a weak variable, so it can be overridden in
65 .\"O the application with a definition like the following:
66 変数
67 .B __malloc_initialize_hook
68 は malloc の実装が初期化される際に一度だけ呼ばれる関数へのポインタである。
69 この変数は書き換え可能 (weak) であり、アプリケーション内で
70 以下のような定義で上書きできる:
71
72 .nf
73     void (*__malloc_initialize_hook)(void) = my_init_hook;
74 .fi
75
76 .\"O Now the function
77 .\"O .IR my_init_hook ()
78 .\"O can do the initialization of all hooks.
79 なお、関数
80 .IR my_init_hook ()
81 で全てのフックの初期化をすることができる。
82 .LP
83 .\"O The four functions pointed to by
84 .\"O .BR __malloc_hook ,
85 .\"O .BR __realloc_hook ,
86 .\"O .BR __memalign_hook ,
87 .\"O .B __free_hook
88 .\"O have a prototype like the functions
89 .\"O .BR malloc (3),
90 .\"O .BR realloc (3),
91 .\"O .BR memalign (3),
92 .\"O .BR free (3),
93 .\"O respectively, except that they have a final argument
94 .\"O .I caller
95 .\"O that gives the address of the caller of
96 .\"O .BR malloc (3),
97 .\"O etc.
98 .BR __malloc_hook ,
99 .BR __realloc_hook ,
100 .BR __memalign_hook ,
101 .B __free_hook
102 で指される 4 つの関数は、各々
103 .BR malloc (3),
104 .BR realloc (3),
105 .BR memalign (3),
106 .BR free (3)
107 とよく似たプロトタイプを持っているが、
108 一番最後の引き数
109 .I caller
110 をとる点が異なる。
111 引き数
112 .I caller
113 には、
114 .BR malloc (3)
115 などの呼び出し元 (caller) のアドレスが格納される。
116 .LP
117 .\"O The variable
118 .\"O .B __after_morecore_hook
119 .\"O points at a function that is called each time after
120 .\"O .BR sbrk (2)
121 .\"O was asked for more memory.
122 変数
123 .B __after_morecore_hook
124 は、領域の追加要求があり
125 .BR sbrk (2)
126 が呼ばれた後で毎回呼び出される関数へのポインタである。
127 .\"O .SH "CONFORMING TO"
128 .SH 準拠
129 .\"O These functions are GNU extensions.
130 これらの関数は GNU による拡張である。
131 .\"O .SH "EXAMPLE"
132 .SH 例
133 .\"O Here is a short example of how to use these variables.
134 これらの変数の使い方の簡単な例を以下に示す。
135 .sp
136 .nf
137 #include <stdio.h>
138 #include <malloc.h>
139
140 .\"O /* Prototypes for our hooks.  */
141 /* 使おうとするフックのプロトタイプ宣言 */
142 static void my_init_hook(void);
143 static void *my_malloc_hook(size_t, const void *);
144
145 .\"O /* Variables to save original hooks. */
146 /* 元々のフックを保存するための変数 */
147 static void *(*old_malloc_hook)(size_t, const void *);
148
149 .\"O /* Override initializing hook from the C library. */
150 /* C ライブラリから呼ばれる初期化フックを上書きする */
151 void (*__malloc_initialize_hook) (void) = my_init_hook;
152
153 static void
154 my_init_hook(void)
155 {
156     old_malloc_hook = __malloc_hook;
157     __malloc_hook = my_malloc_hook;
158 }
159
160 static void *
161 my_malloc_hook(size_t size, const void *caller)
162 {
163     void *result;
164
165 .\"O     /* Restore all old hooks */
166     /* 元々のフックを全て戻す */
167     __malloc_hook = old_malloc_hook;
168
169 .\"O     /* Call recursively */
170     /* malloc の再帰的呼び出し */
171     result = malloc(size);
172
173 .\"O     /* Save underlying hooks */
174     /* 現在設定されているフック (underlying hook) を保存する */
175     old_malloc_hook = __malloc_hook;
176
177 .\"O     /* printf() might call malloc(), so protect it too. */
178     /* printf() は malloc() を呼び出す可能性があるので
179         ここでもガードを行う (元々のフックのままにしておく) */
180     printf("malloc(%u) called from %p returns %p\\n",
181             (unsigned int) size, caller, result);
182
183 .\"O     /* Restore our own hooks */
184     /* ユーザが使おうとするフックを再設定する */
185     __malloc_hook = my_malloc_hook;
186
187     return result;
188 }
189 .fi
190 .\"O .SH "SEE ALSO"
191 .SH 関連項目
192 .BR mallinfo (3),
193 .BR malloc (3),
194 .BR mcheck (3),
195 .BR mtrace (3)