Man page - __malloc_initialize_hook(3)

Packages contains this manual

Available languages:

en fr ja ro

Manual

MALLOC_HOOK

名 前
書 åŧ
čĒŦ 明
æē– 拠
æŗ¨ 意
例
é–ĸ 逪 項 į›Ž
こ ぎ 文 書 ãĢ つ い ãĻ

名 前

__malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook, __realloc_hook, __after_morecore_hook - malloc デ バ ッ グ ᔍ ぎ 変 数

書 åŧ

#include <malloc.h>

void *(*__malloc_hook)(size_t size , const void * caller );

void *(*__realloc_hook)(void * ptr , size_t size , const void * caller );

void *(*__memalign_hook)(size_t alignment , size_t size ,
const void *
caller );

void (*__free_hook)(void * ptr , const void * caller );

void (*__malloc_initialize_hook)(void);

void (*__after_morecore_hook)(void);

čĒŦ 明

GNU C ナ イ ブ ナ ãƒĒ で は 、 遊 切 ãĒ フ ッ ク é–ĸ 数 (hook function) を 指 厚 す る こ と で malloc (3), realloc (3), free (3) ぎ 動 äŊœ を 変 更 す る こ と が で き る 。 例 え ば 、 動 įš„ ãĢ ãƒĄ ãƒĸ ãƒĒ ãƒŧ 剞 り åŊ“ ãĻ を 行 う プ ロ グ ナ ム ぎ デ バ ッ グ ãĢ こ れ ら ぎ フ ッ ク を äŊŋ う こ と が で き る 。

変 数 __malloc_initialize_hook は malloc ぎ 原 čŖ… が 初 期 化 さ れ る 際 ãĢ 一 åēĻ ã  け å‘ŧ ば れ る é–ĸ 数 へ ぎ ポ イ ãƒŗ ã‚ŋ ãƒŧ で あ る 。 こ ぎ 変 数 は 書 き 換 え 可 čƒŊ (weak) で あ り 、 ã‚ĸ プ ãƒĒ ã‚ą ãƒŧ ã‚ˇ ョ ãƒŗ 内 で äģĨ 下 ぎ よ う ãĒ 厚 įžŠ で 上 書 き で き る :

void (*__malloc_initialize_hook)(void) = my_init_hook;

ãĒ お 、 é–ĸ 数 my_init_hook () で 全 ãĻ ぎ フ ッ ク ぎ 初 期 化 を す る こ と が で き る 。

__malloc_hook , __realloc_hook , __memalign_hook , __free_hook で 指 さ れ る 4 つ ぎ é–ĸ 数 は 、 各 々 malloc (3), realloc (3), memalign (3), free (3) と よ く äŧŧ た プ ロ ト ã‚ŋ イ プ を 持 ãŖ ãĻ い る が 、 一 į•Ē 最 垌 ぎ åŧ• 数 caller を と る į‚š が į•° ãĒ る 。 åŧ• 数 caller ãĢ は 、 malloc (3) ãĒ お ぎ å‘ŧ ãŗ å‡ē し 元 (caller) ぎ ã‚ĸ ド ãƒŦ ゚ が æ ŧ į´ さ れ る 。

変 数 __after_morecore_hook は 、 領 域 ぎ čŋŊ 加 čρ æą‚ が あ り sbrk (2) が å‘ŧ ば れ た 垌 で 毎 回 å‘ŧ ãŗ å‡ē さ れ る é–ĸ 数 へ ぎ ポ イ ãƒŗ ã‚ŋ ãƒŧ で あ る 。

æē– 拠

こ れ ら ぎ é–ĸ 数 は GNU ãĢ よ る æ‹Ą åŧĩ で あ る 。

æŗ¨ 意

The use of these hook functions is not safe in multithreaded programs, and they are now deprecated. From glibc 2.24 onwards, the __malloc_initialize_hook variable has been removed from the API. Programmers should instead preempt calls to the relevant functions by defining and exporting functions such as "malloc" and "free".

例

こ れ ら ぎ 変 数 ぎ äŊŋ い æ–š ぎ į°Ą 単 ãĒ 例 を äģĨ 下 ãĢ į¤ē す 。

#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 ナ イ ブ ナ ãƒĒ か ら å‘ŧ ば れ る 初 期 化 フ ッ ク を 上 書 き す る */
void (*__malloc_initialize_hook) (void) = my_init_hook;

static void
my_init_hook(void)
{
old_malloc_hook = __malloc_hook;
__malloc_hook = my_malloc_hook;
}

static void *
my_malloc_hook(size_t size, const void *caller)
{
void *result;

/* 元 々 ぎ フ ッ ク を 全 ãĻ æˆģ す */
__malloc_hook = old_malloc_hook;

/* malloc ぎ 再 帰 įš„ å‘ŧ ãŗ å‡ē し */
result = malloc(size);

/* įž 在 設 厚 さ れ ãĻ い る フ ッ ク (underlying hook) を äŋ 存 す る */
old_malloc_hook = __malloc_hook;

/* printf() は malloc() を å‘ŧ ãŗ å‡ē す 可 čƒŊ 性 が あ る ぎ で
こ こ で も ã‚Ŧ ãƒŧ ド を 行 う (元 々 ぎ フ ッ ク ぎ ぞ ぞ ãĢ し ãĻ お く ) */
printf("malloc(%zu) called from %p returns %p\n",
size, caller, result);

/* ãƒĻ ãƒŧ ã‚ļ ãƒŧ が äŊŋ お う と す る フ ッ ク を 再 設 厚 す る */
__malloc_hook = my_malloc_hook;

return result;
}

é–ĸ 逪 項 į›Ž

mallinfo (3), malloc (3), mcheck (3), mtrace (3)

こ ぎ 文 書 ãĢ つ い ãĻ

こ ぎ man ペ ãƒŧ ジ は Linux man-pages プ ロ ジ ェ ク ト ぎ ãƒĒ ãƒĒ ãƒŧ ゚ 5.10 ぎ 一 部 で あ る 。 プ ロ ジ ェ ク ト ぎ čĒŦ 明 と バ グ å ą 告 ãĢ é–ĸ す る 情 å ą は https://www.kernel.org/doc/man-pages/ ãĢ 書 か れ ãĻ い る 。