MALLOC_HOOK

Section: Linux Programmer's Manual (3)
Updated: 2010-10-13
IndexJM Home Page
 

名前

__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 による拡張である。 

注意

マルチスレッドプログラムでは、 これらのフック関数の使用は安全ではなく、 今では非推奨である。 プログラマは、 "malloc" や "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 *);
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; result = malloc(size); old_malloc_hook = __malloc_hook; printf("malloc(%u) called from %p returns %p\n", (unsigned int) size, caller, result); __malloc_hook = my_malloc_hook; return result;
}
 

関連項目

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

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報はhttp://www.kernel.org/doc/man-pages/ に書かれている。


関連キーワード

hook,size,フック,caller,MALLOC,free,initialize,static,init,realloc 

Index

名前
書式
説明
準拠
注意
関連項目
この文書について

This document was created byman2html, using the manual pages.
Time: 20:43:03 GMT, August 08, 2017