malloc_get_state, malloc_set_state - malloc
実装の状態を保存/復元する
#include <malloc.h>
void *malloc_get_state(void);
int malloc_set_state(void *state);
注意:
これらの関数は glibc
バージョン 2.25
で削除された。
malloc_get_state() 関数は
malloc(3)
内部のすべての管理用変数を記録する
(ただし、
ヒープの実際の内容と
malloc_hook(3)
関数ポインターの状態は記録されない)。
状態は
malloc(3)
で動的に確保されたシステム依存の
opaque な
(内部構造は分からない)
データ構造体に記録され、
関数の結果としてそのデータ構造体へのポインターが返される
(このメモリーは呼び出し元が責任をもって
free(3)
する必要がある)。
malloc_set_state() 関数は、
malloc(3)
内部のすべての管理用変数を
state が指す opaque
なデータ構造体から復元する。
成功すると、
malloc_get_state()
は新しく割り当てられたデータ構造体へのポインターを返す。
エラーの場合
(例えば、データ構造体に必要なメモリーが割り当てられなかったなど)、
malloc_get_state() は NULL を返す。
成功すると、
malloc_set_state()
は 0 を返す。 実装が
state
が正しく作成されたデータ構造体を指していないと検出した場合、
malloc_set_state() は -1 を返す。
state
が参照するデータ構造体のバージョンがこの実装が認識するバージョンよりも新しいと実装が検出した場合、
malloc_set_state() は -2 を返す。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
malloc_get_state(), malloc_set_state() |
Thread safety |
MT-Safe |
これらの関数は GNU
による拡張である。
これらの関数が役に立つのは、
この
malloc(3)
の実装が共有ライブラリの一部として使用され、
ヒープの内容が何か他の方法で保存/復元される場合である。
この手法は GNU Emacs
が「ダンプ」関数
("dumping" function)
を実装するのに使用されている。
これらの関数がフック関数ポインターの保存と復元を行うことはない。
ただし、 2
つ例外がある。
malloc_get_state()
が呼び出された際に
malloc チェック (
mallopt(3) 参照)
が使用中の場合、
malloc_set_state() は可能なら malloc
チェックフックをリセットする。
また、
保存された状態の malloc
チェックが使用中でないが、
呼び出し元が malloc
チェックを要求していた場合、
フックは 0
にリセットされる。
malloc(3),
mallopt(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。