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
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?
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>
14 .TH MALLOC_HOOK 3 2002-07-20 "GNU" "Linux Programmer's Manual"
16 __malloc_hook, __malloc_initialize_hook,
17 __memalign_hook, __free_hook, __realloc_hook,
18 __after_morecore_hook \- malloc ¥Ç¥Ð¥Ã¥°ÍѤÎÊÑ¿ô
21 .B "#include <malloc.h>"
23 .BI "void *(*__malloc_hook)(size_t " size ", const void *" caller );
25 .BI "void *(*__realloc_hook)(void *" ptr ", size_t " size \
26 ", const void *" caller );
28 .BI "void *(*__memalign_hook)(size_t " alignment ", size_t " size ,
29 .BI " const void *" caller );
31 .BI "void (*__free_hook)(void *" ptr ", const void *" caller );
33 .B "void (*__malloc_initialize_hook)(void);"
35 .B "void (*__after_morecore_hook)(void);"
38 GNU C ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï¡¢Å¬Àڤʥե寴ؿô (hook function) ¤ò»ØÄꤹ¤ë¤³¤È¤Ç
42 ¤ÎÆ°ºî¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£Î㤨¤Ð¡¢Æ°Åª¤Ë¥á¥â¥ê³ä¤êÅö¤Æ¤ò¹Ô¤¦
43 ¥×¥í¥°¥é¥à¤Î¥Ç¥Ð¥Ã¥°¤Ë¤³¤ì¤é¤Î¥Õ¥Ã¥¯¤ò»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£
46 .B __malloc_initialize_hook
47 ¤Ï malloc ¤Î¼ÂÁõ¤¬½é´ü²½¤µ¤ì¤ëºÝ¤Ë°ìÅÙ¤À¤±¸Æ¤Ð¤ì¤ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
48 ¤³¤ÎÊÑ¿ô¤Ï½ñ¤´¹¤¨²Äǽ (weak) ¤Ç¤¢¤ê¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆâ¤Ç
49 °Ê²¼¤Î¤è¤¦¤ÊÄêµÁ¤Ç¾å½ñ¤¤Ç¤¤ë:
52 void (*__malloc_initialize_hook)(void) = my_init_hook;
57 ¤ÇÁ´¤Æ¤Î¥Õ¥Ã¥¯¤Î½é´ü²½¤ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
63 ¤Ç»Ø¤µ¤ì¤ë 4 ¤Ä¤Î´Ø¿ô¤Ï¡¢³Æ¡¹
68 ¤È¤è¤¯»÷¤¿¥×¥í¥È¥¿¥¤¥×¤ò»ý¤Ã¤Æ¤¤¤ë¤¬¡¢
76 ¤Ê¤É¤Î¸Æ¤Ó½Ð¤·¸µ (caller) ¤Î¥¢¥É¥ì¥¹¤¬³ÊǼ¤µ¤ì¤ë¡£
79 .B __after_morecore_hook
80 ¤Ï¡¢Îΰè¤ÎÄɲÃÍ׵᤬¤¢¤ê
82 ¤¬¸Æ¤Ð¤ì¤¿¸å¤ÇËè²ó¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
84 ¤³¤ì¤é¤Î´Ø¿ô¤Ï GNU ¤Ë¤è¤ë³ÈÄ¥¤Ç¤¢¤ë¡£
86 ¤³¤ì¤é¤ÎÊÑ¿ô¤Î»È¤¤Êý¤Î´Êñ¤ÊÎã¤ò°Ê²¼¤Ë¼¨¤¹¡£
92 /* »È¤ª¤¦¤È¤¹¤ë¥Õ¥Ã¥¯¤Î¥×¥í¥È¥¿¥¤¥×Àë¸À */
93 static void my_init_hook(void);
94 static void *my_malloc_hook(size_t, const void *);
96 /* ¸µ¡¹¤Î¥Õ¥Ã¥¯¤òÊݸ¤¹¤ë¤¿¤á¤ÎÊÑ¿ô */
97 static void *(*old_malloc_hook)(size_t, const void *);
99 /* C ¥é¥¤¥Ö¥é¥ê¤«¤é¸Æ¤Ð¤ì¤ë½é´ü²½¥Õ¥Ã¥¯¤ò¾å½ñ¤¤¹¤ë */
100 void (*__malloc_initialize_hook) (void) = my_init_hook;
105 old_malloc_hook = __malloc_hook;
106 __malloc_hook = my_malloc_hook;
110 my_malloc_hook(size_t size, const void *caller)
114 /* ¸µ¡¹¤Î¥Õ¥Ã¥¯¤òÁ´¤ÆÌ᤹ */
115 __malloc_hook = old_malloc_hook;
117 /* malloc ¤ÎºÆµ¢Åª¸Æ¤Ó½Ð¤· */
118 result = malloc(size);
120 /* ¸½ºßÀßÄꤵ¤ì¤Æ¤¤¤ë¥Õ¥Ã¥¯ (underlying hook) ¤òÊݸ¤¹¤ë */
121 old_malloc_hook = __malloc_hook;
123 /* printf() ¤Ï malloc() ¤ò¸Æ¤Ó½Ð¤¹²ÄǽÀ¤¬¤¢¤ë¤Î¤Ç
124 ¤³¤³¤Ç¤â¥¬¡¼¥É¤ò¹Ô¤¦ (¸µ¡¹¤Î¥Õ¥Ã¥¯¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯) */
125 printf("malloc(%u) called from %p returns %p\\n",
126 (unsigned int) size, caller, result);
128 /* ¥æ¡¼¥¶¤¬»È¤ª¤¦¤È¤¹¤ë¥Õ¥Ã¥¯¤òºÆÀßÄꤹ¤ë */
129 __malloc_hook = my_malloc_hook;