#include <malloc.h> void *malloc_get_state(void); int malloc_set_state(void *state);
malloc_get_state() 関数は malloc(3) 内部のすべての管理用変数を記録する (ただし、 ヒープの実際の内容と malloc_hook(3) 関数ポインターの状態は記録されない)。 状態は malloc(3) で動的に確保されたシステム依存の opaque な (内部構造は分からない) データ構造体に記録され、 関数の結果としてそのデータ構造体へのポインターが返される (このメモリーは呼び出し元が責任をもって free(3) する必要がある)。
malloc_set_state() 関数は、 malloc(3) 内部のすべての管理用変数を state が指す opaque なデータ構造体から復元する。
成功すると、 malloc_set_state() は 0 を返す。 実装が state が正しく作成されたデータ構造体を指していないと検出した場合、 malloc_set_state() は -1 を返す。 state が参照するデータ構造体のバージョンがこの実装が認識するバージョンよりも新しいと実装が検出した場合、 malloc_set_state() は -2 を返す。
インターフェース | 属性 | 値 |
malloc_get_state(), malloc_set_state() | Thread safety | MT-Safe |
これらの関数がフック関数ポインターの保存と復元を行うことはない。 ただし、 2 つ例外がある。 malloc_get_state() が呼び出された際に malloc チェック (mallopt(3) 参照) が使用中の場合、 malloc_set_state() は可能なら malloc チェックフックをリセットする。 また、 保存された状態の malloc チェックが使用中でないが、 呼び出し元が malloc チェックを要求していた場合、 フックは 0 にリセットされる。