.\" 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 ̾Á°
+.SH 名前
__malloc_hook, __malloc_initialize_hook,
__memalign_hook, __free_hook, __realloc_hook,
-__after_morecore_hook \- malloc ¥Ç¥Ð¥Ã¥°ÍѤÎÊÑ¿ô
-.SH ½ñ¼°
+__after_morecore_hook \- malloc デバッグ用の変数
+.SH 書式
.nf
.B "#include <malloc.h>"
.sp
.sp
.B "void (*__after_morecore_hook)(void);"
.fi
-.SH ÀâÌÀ
-GNU C ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï¡¢Å¬Àڤʥե寴ؿô (hook function) ¤ò»ØÄꤹ¤ë¤³¤È¤Ç
+.SH 説明
+GNU C ライブラリでは、適切なフック関数 (hook function) を指定することで
.BR malloc (3),
.BR realloc (3),
.BR free (3)
-¤ÎÆ°ºî¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£Î㤨¤Ð¡¢Æ°Åª¤Ë¥á¥â¥ê³ä¤êÅö¤Æ¤ò¹Ô¤¦
-¥×¥í¥°¥é¥à¤Î¥Ç¥Ð¥Ã¥°¤Ë¤³¤ì¤é¤Î¥Õ¥Ã¥¯¤ò»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£
+の動作を変更することができる。例えば、動的にメモリ割り当てを行う
+プログラムのデバッグにこれらのフックを使うことができる。
.LP
-ÊÑ¿ô
+変数
.B __malloc_initialize_hook
-¤Ï malloc ¤Î¼ÂÁõ¤¬½é´ü²½¤µ¤ì¤ëºÝ¤Ë°ìÅÙ¤À¤±¸Æ¤Ð¤ì¤ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
-¤³¤ÎÊÑ¿ô¤Ï½ñ¤´¹¤¨²Äǽ (weak) ¤Ç¤¢¤ê¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆâ¤Ç
-°Ê²¼¤Î¤è¤¦¤ÊÄêµÁ¤Ç¾å½ñ¤¤Ç¤¤ë:
+は 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 ¤Ä¤Î´Ø¿ô¤Ï¡¢³Æ¡¹
+で指される 4 つの関数は、各々
.BR malloc (3),
.BR realloc (3),
.BR memalign (3),
.BR free (3)
-¤È¤è¤¯»÷¤¿¥×¥í¥È¥¿¥¤¥×¤ò»ý¤Ã¤Æ¤¤¤ë¤¬¡¢
-°ìÈֺǸå¤Î°ú¤¿ô
+とよく似たプロトタイプを持っているが、
+一番最後の引き数
.I caller
-¤ò¤È¤ëÅÀ¤¬°Û¤Ê¤ë¡£
-°ú¤¿ô
+をとる点が異なる。
+引き数
.I caller
-¤Ë¤Ï¡¢
+には、
.BR malloc (3)
-¤Ê¤É¤Î¸Æ¤Ó½Ð¤·¸µ (caller) ¤Î¥¢¥É¥ì¥¹¤¬³ÊǼ¤µ¤ì¤ë¡£
+などの呼び出し元 (caller) のアドレスが格納される。
.LP
-ÊÑ¿ô
+変数
.B __after_morecore_hook
-¤Ï¡¢Îΰè¤ÎÄɲÃÍ׵᤬¤¢¤ê
+は、領域の追加要求があり
.BR sbrk (2)
-¤¬¸Æ¤Ð¤ì¤¿¸å¤ÇËè²ó¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
-.SH ½àµò
-¤³¤ì¤é¤Î´Ø¿ô¤Ï GNU ¤Ë¤è¤ë³ÈÄ¥¤Ç¤¢¤ë¡£
-.SH Îã
-¤³¤ì¤é¤ÎÊÑ¿ô¤Î»È¤¤Êý¤Î´Êñ¤ÊÎã¤ò°Ê²¼¤Ë¼¨¤¹¡£
+が呼ばれた後で毎回呼び出される関数へのポインタである。
+.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 ¥é¥¤¥Ö¥é¥ê¤«¤é¸Æ¤Ð¤ì¤ë½é´ü²½¥Õ¥Ã¥¯¤ò¾å½ñ¤¤¹¤ë */
+/* C ライブラリから呼ばれる初期化フックを上書きする */
void (*__malloc_initialize_hook) (void) = my_init_hook;
static void
{
void *result;
- /* ¸µ¡¹¤Î¥Õ¥Ã¥¯¤òÁ´¤ÆÌ᤹ */
+ /* 元々のフックを全て戻す */
__malloc_hook = old_malloc_hook;
- /* malloc ¤ÎºÆµ¢Åª¸Æ¤Ó½Ð¤· */
+ /* malloc の再帰的呼び出し */
result = malloc(size);
- /* ¸½ºßÀßÄꤵ¤ì¤Æ¤¤¤ë¥Õ¥Ã¥¯ (underlying hook) ¤òÊݸ¤¹¤ë */
+ /* 現在設定されているフック (underlying hook) を保存する */
old_malloc_hook = __malloc_hook;
- /* printf() ¤Ï malloc() ¤ò¸Æ¤Ó½Ð¤¹²ÄǽÀ¤¬¤¢¤ë¤Î¤Ç
- ¤³¤³¤Ç¤â¥¬¡¼¥É¤ò¹Ô¤¦ (¸µ¡¹¤Î¥Õ¥Ã¥¯¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯) */
+ /* 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 ´ØÏ¢¹àÌÜ
+.SH 関連項目
.BR mallinfo (3),
.BR malloc (3),
.BR mcheck (3),