malloc_hook - ライブラリコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 例
- 準拠
- 関連項目
名前
__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
(),
realloc
(),
free
()の動作を変更することができる。例えば、動的にメモリ割り当てを行う
プログラムのデバッグにこれらのフックを使うことができる。
変数
__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
(),
realloc
(),
memalign
(),
free
()とよく似たプロトタイプを持っているが、
一番最後の引き数
caller
をとる点が異なる。
引き数
caller
には、
malloc
()などの呼び出し元 (caller) のアドレスが格納される。
変数
__after_morecore_hook
は、領域の追加要求があり
sbrk
()が呼ばれた後で毎回呼び出される関数へのポインタである。
例
これらの変数の使い方の簡単な例を以下に示す。
#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(%u) called from %p returns %p",
(unsigned int) size, caller, result);
/* ユーザが使おうとするフックを再設定する */
__malloc_hook = my_malloc_hook;
return result;
}
準拠
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする