nlib
|
heapライブラリ内にはCリンケージを持つnmalloc/nfree
等のmalloc関連関数群が定義されています。
[詳解]
ファイル | |
ファイル | heap.h |
ヒープライブラリのヘッダを全てインクルードします。 | |
ファイル | NMalloc.h |
nmalloc/nfree 等が宣言されているファイルです。 | |
クラス | |
struct | HeapHash |
ユーザーが利用しているヒープ内のメモリの利用状況のサマリが記述される構造体です。 [詳解] | |
struct | NMallocSettings |
nmalloc の初期設定を行うパラメータを記述します。nmalloc_get_settings() を定義して設定します。 [詳解] | |
マクロ定義 | |
#define | NLIB_REPLACE_MALLOC |
nlib_malloc() 等をnmalloc を利用するように定義するマクロです。 | |
#define | NLIB_REPLACE_MALLOC_NEW |
nlib_malloc() 等をnmalloc を利用するように定義し、new/delete もそのように定義するマクロです。 | |
#define | NMALLOC_HEAPOPTION_ENABLE_ENV (0x00000001) |
環境変数による設定の上書きを有効にします。 | |
#define | NMALLOC_HEAPOPTION_CACHE_DISABLE (0x00000004) |
CachedHeapによるキャッシングを無効にします。 [詳解] | |
#define | NMALLOC_HEAPOPTION_CHECK_0 (0x00000000) |
デフォルト設定で最も効率よく動作します。 [詳解] | |
#define | NMALLOC_HEAPOPTION_CHECK_1 (0x00000008) |
16bitのメタデータを2つ設定可能にします。メモリの先頭部分のデータ破壊を検出します。 [詳解] | |
型定義 | |
typedef int(* | nmalloc_heapwalk_callback) (void *allocated_ptr, size_t size, void *user_ptr) |
nmalloc_walk_allocated_ptrs() から呼び出されるユーザー定義のコールバック関数です。 [詳解] | |
列挙型 | |
enum | NMallocDumpMode { NMALLOC_DUMP_BASIC = 0, NMALLOC_DUMP_SPANS = 1, NMALLOC_DUMP_POINTERS = 2, NMALLOC_DUMP_ALL = NMALLOC_DUMP_SPANS | NMALLOC_DUMP_POINTERS } |
nmalloc_dumpex() 関数に渡す引数の型です。 [詳解] | |
関数 | |
bool | operator== (const HeapHash &rhs, const HeapHash &lhs) |
2つのサマリを比較して等価ならば、true を返します。 | |
bool | operator!= (const HeapHash &rhs, const HeapHash &lhs) |
2つのサマリを比較して等価でなければ、true を返します。 | |
void | nmalloc_clear_tls (void) |
実行中のスレッドにキャッシュされている割り当て可能なメモリを中央ヒープに返します。 [詳解] | |
NLIB_CHECK_RESULT void * | nrealloc (void *ptr, size_t size) |
メモリの割り当てを変更します。realloc() C標準関数に相当します。 [詳解] | |
NLIB_CHECK_RESULT void * | nmalloc (size_t size) |
指定バイト分のメモリ領域を確保します。malloc() C標準関数に相当します。 [詳解] | |
NLIB_CHECK_RESULT void * | ncalloc (size_t nmemb, size_t size) |
0に初期化される要素とメモリの配列を割り当てます。 [詳解] | |
NLIB_CHECK_RESULT void * | nmalloc_aligned (size_t size, size_t algn) |
アライメントを指定してメモリ領域を確保します。 [詳解] | |
size_t | nmalloc_size (const void *ptr) |
ptrに実際に割り当てられたメモリ量を返します。 [詳解] | |
void | nfree (void *p) |
メモリ領域を解放します。free() C標準関数に相当します。 [詳解] | |
void | nfree_size (void *p, size_t size) |
メモリ領域を解放します。メモリのサイズ情報を利用することで高速にメモリを解放できることがあります。 [詳解] | |
errno_t | nmalloc_walk_allocated_ptrs (nmalloc_heapwalk_callback func, void *user_ptr) |
ヒープにアロケートされた領域1つずつに対してコールバック関数func を呼び出します。 [詳解] | |
変数 | |
size_t | HeapHash::alloc_count |
ヒープ内でユーザーによってアロケートされた領域の数です。 | |
size_t | HeapHash::alloc_size |
ヒープ内でユーザーによってアロケートされた領域のサイズの合計です。 | |
size_t | HeapHash::hash |
ヒープ内のユーザーによるメモリ確保の状況をハッシュ値にしたものです。 | |
void * | NMallocSettings::addr |
nmalloc が利用する領域の先頭へのポインタを指定します。 | |
size_t | NMallocSettings::size |
nmalloc が利用する最大のメモリサイズを指定します。4096バイトの倍数を指定する必要があります。 [詳解] | |
unsigned int | NMallocSettings::heap_option |
ヒープオプションを指定します。デフォルトは0です。 [詳解] | |
nmallocの初期化と終了 | |
void | nmalloc_get_settings (NMallocSettings *settings) |
ユーザーがこの関数を定義することでnmalloc の初期化設定をコントロールすることができます。 [詳解] | |
void | nmalloc_finalize_tls (void) |
実行中のスレッド固有のメモリを全て中央ヒープに返却します。スレッドを終了させるときに呼び出す必要があります。 [詳解] | |
エラーチェック及びデバック用関数 | |
void | nmalloc_heaphash (HeapHash *hash) |
ユーザーによるメモリ確保状況を調べてサマリを作成します。 [詳解] | |
int | nmalloc_isclean (void) |
ヒープの状態が初期化直後と同じかどうか確認します。 [詳解] | |
void | nmalloc_dump (void) |
ヒープの基本的な状況をダンプします。 [詳解] | |
void | nmalloc_dumpex (NMallocDumpMode mode) |
ヒープの状況をダンプします。 [詳解] | |
void | nmalloc_dumpex2 (NMallocDumpMode mode, nlib_fd fd) |
ヒープの状況をダンプします。 [詳解] | |
アロケートされたメモリへメタデータを付加する関数 | |
| |
errno_t | nmalloc_setmark1 (void *p, uint16_t mark1) |
アロケートされたメモリに情報を付加します。 [詳解] | |
errno_t | nmalloc_setmark2 (void *p, uint16_t mark2) |
アロケートされたメモリに情報を付加します。 [詳解] | |
errno_t | nmalloc_getmark (const void *ptr, uint16_t *mark1, uint16_t *mark2) |
アロケートされたメモリに付加された情報を取得します。 [詳解] | |
void * | nmalloc_getobjptr (void *raw_ptr) |
nmalloc_heapwalk_callback に渡されたポインタをオブジェクトへのポインタに変換します。 [詳解] | |
heapライブラリ内にはCリンケージを持つnmalloc/nfree
等のmalloc関連関数群が定義されています。
#define NMALLOC_HEAPOPTION_CACHE_DISABLE (0x00000004) |
CachedHeapによるキャッシングを無効にします。
NMALLOC_HEAPOPTION_ENABLE_ENV
が指定されている場合は、環境変数NLIB_NMALLOC_DISABLE_TLSCACHE
に真偽値を設定することで、ソースコード上の設定を上書きすることが可能です。 #define NMALLOC_HEAPOPTION_CHECK_0 (0x00000000) |
#define NMALLOC_HEAPOPTION_CHECK_1 (0x00000008) |
16bitのメタデータを2つ設定可能にします。メモリの先頭部分のデータ破壊を検出します。
NMALLOC_HEAPOPTION_ENABLE_ENV
が指定されている場合は、環境変数NLIB_NMALLOC_MODE
を1に設定することで、ソースコード上の設定をこの設定に上書きすることが可能です。 int(* nmalloc_heapwalk_callback)(void *allocated_ptr, size_t size, void *user_ptr) |
nmalloc_walk_allocated_ptrs()
から呼び出されるユーザー定義のコールバック関数です。
[in] | allocated_ptr | ヒープにアロケートされた領域へのポインタ |
[in] | size | 領域のサイズ |
[in] | user_ptr | ユーザーデータ |
0 | nmalloc_walk_allocated_ptrs() の継続実行を行わない場合 |
1 | nmalloc_walk_allocated_ptrs() の継続実行を行う場合 |
enum NMallocDumpMode |
nmalloc_dumpex()
関数に渡す引数の型です。
列挙値 | |
---|---|
NMALLOC_DUMP_BASIC |
基本的な情報のみを表示します。 |
NMALLOC_DUMP_SPANS |
ページ単位の利用状況を表示します。 |
NMALLOC_DUMP_POINTERS |
ユーザーによって確保されている全てのメモリのアドレスとサイズを表示します。 |
NMALLOC_DUMP_ALL |
情報を全て表示します。 |
ncalloc | ( | size_t | nmemb, |
size_t | size | ||
) |
0に初期化される要素とメモリの配列を割り当てます。
[in] | nmemb | 要素の数 |
[in] | size | 各要素のバイト数 |
NULL
nfree | ( | void * | p | ) |
メモリ領域を解放します。free()
C標準関数に相当します。
[in] | p | 解放するメモリブロックのポインタ |
nfree_size | ( | void * | p, |
size_t | size | ||
) |
メモリ領域を解放します。メモリのサイズ情報を利用することで高速にメモリを解放できることがあります。
[in] | p | 解放するメモリブロックのポインタ |
[in] | size | nmalloc() の呼び出しの際に与えたサイズ |
nmalloc_aligned()
を利用した場合にこの関数で解放することはできないことに注意してください。 nmalloc | ( | size_t | size | ) |
指定バイト分のメモリ領域を確保します。malloc()
C標準関数に相当します。
[in] | size | 確保したいメモリのバイトサイズ |
NULL
nmalloc_aligned | ( | size_t | size, |
size_t | algn | ||
) |
アライメントを指定してメモリ領域を確保します。
[in] | size | 確保したいメモリのバイトサイズ |
[in] | algn | 確保したいメモリのアライメント |
NULL
algn
は8以上で2のべき乗となる値を指定する必要があります。 nmalloc_clear_tls | ( | void | ) |
実行中のスレッドにキャッシュされている割り当て可能なメモリを中央ヒープに返します。
nmalloc
は各スレッドに割り当て可能なメモリをキャッシュすることで高速化を行なっていますが、この関数を呼び出すことでキャッシュされている割り当て可能メモリを中央ヒープ(CentralHeap)に明示的に返却します。 nmalloc_dump | ( | void | ) |
ヒープの基本的な状況をダンプします。
nmalloc_dumpex(NMALLOC_DUMP_BASIC)
と等価です。 void nmalloc_dumpex | ( | NMallocDumpMode | mode | ) |
ヒープの状況をダンプします。
[in] | mode | 表示オプションです。 |
void nmalloc_dumpex2 | ( | NMallocDumpMode | mode, |
nlib_fd | fd | ||
) |
ヒープの状況をダンプします。
[in] | mode | 表示オプションです。 |
[in] | fd | 表示対象のファイルディスクリプタです。 |
nmalloc_finalize_tls | ( | void | ) |
実行中のスレッド固有のメモリを全て中央ヒープに返却します。スレッドを終了させるときに呼び出す必要があります。
nmalloc_clear_tls()
に加えて、キャッシュ管理用のデータ領域も中央ヒープ(CentralHeap
)に返却します。 nmalloc_get_settings | ( | NMallocSettings * | settings | ) |
ユーザーがこの関数を定義することでnmalloc
の初期化設定をコントロールすることができます。
[out] | settings | nmalloc の設定 |
nmalloc
の初期化設定を変更することができるようになります。 nmalloc_getmark | ( | const void * | ptr, |
uint16_t * | mark1, | ||
uint16_t * | mark2 | ||
) |
アロケートされたメモリに付加された情報を取得します。
[in] | ptr | アロケートしたオブジェクトのポインタ |
[out] | mark1 | 16bitの付加情報その1が格納されるポインタ。NULL指定可 |
[out] | mark2 | 16bitの付加情報その2が格納されるポインタ。NULL指定可 |
CachedHeap::GetMark()
を実行します。 詳しくは、CachedHeap::GetMark()
を御覧ください。 nmalloc_getobjptr | ( | void * | raw_ptr | ) |
nmalloc_heapwalk_callback
に渡されたポインタをオブジェクトへのポインタに変換します。
[in] | raw_ptr | nmalloc_heapwalk_callback に渡されたポインタ |
CachedHeap::GetObjPtr()
を実行します。 詳しくは、CachedHeap::GetObjPtr()
を御覧ください。 nmalloc_heaphash | ( | HeapHash * | hash | ) |
ユーザーによるメモリ確保状況を調べてサマリを作成します。
[in] | hash | サマリが格納される構造体 |
nn::nlib::heap::CentralHeap
)の割り当て状況を調査し、サマリを計算します。 メモリリークの調査等に利用することが可能です。 NMALLOC_HEAPOPTION_CACHE_DISABLE
を指定してヒープを初期化するか、事前にnmalloc_clear_tls()
を全てのスレッドで呼び出しておきます。 nmalloc_isclean | ( | void | ) |
ヒープの状態が初期化直後と同じかどうか確認します。
true
nmalloc_finalize_tls()
によるスレッド毎のキャッシュの解放も含む)に呼び出すことで、ヒープの状態を厳密にチェックすることができます。 ヒープの状態がメタデータも含めて初期化直後の状態と同じかチェックします。 従ってメモリリークしていなくても失敗することがあります。 nmalloc_setmark1 | ( | void * | p, |
uint16_t | mark1 | ||
) |
アロケートされたメモリに情報を付加します。
[in] | p | アロケートしたオブジェクトのポインタ |
[in] | mark1 | 16bitの付加情報その1 |
nmalloc_setmark2 | ( | void * | p, |
uint16_t | mark2 | ||
) |
アロケートされたメモリに情報を付加します。
[in] | p | アロケートしたオブジェクトのポインタ |
[in] | mark2 | 16bitの付加情報その2 |
CachedHeap::SetMark2()
を実行します。 詳しくは、CachedHeap::SetMark2()
を御覧ください。 nmalloc_size | ( | const void * | ptr | ) |
ptrに実際に割り当てられたメモリ量を返します。
[in] | ptr | nmalloc 等で割り当てられた領域へのポインタ |
nmalloc
等が割り当てたメモリ量_msize()
関数や、Linuxにおけるmalloc_usable_size()
と同等の機能です。 nmalloc_walk_allocated_ptrs | ( | nmalloc_heapwalk_callback | func, |
void * | user_ptr | ||
) |
ヒープにアロケートされた領域1つずつに対してコールバック関数func
を呼び出します。
[in] | func | コールバック関数 |
[in] | user_ptr | ユーザー用ポインタ |
void * nrealloc | ( | void * | ptr, |
size_t | size | ||
) |
メモリの割り当てを変更します。realloc()
C標準関数に相当します。
[in] | ptr | nmalloc() , nmalloc_aligned() 関数を用いて確保したヒープメモリへのポインタ。 |
[in] | size | 変更したいメモリのバイトサイズ |
NULL
NMallocSettings::heap_option |
ヒープオプションを指定します。デフォルトは0です。
値 | 効果 |
---|---|
NMALLOC_HEAPOPTION_ENABLE_ENV | 環境変数による設定の上書きを有効にします。 |
NMALLOC_HEAPOPTION_CACHE_DISABLE | CachedHeapによるキャッシングを無効にします。 |
NMALLOC_HEAPOPTION_CHECK_0 | デフォルト設定で最も効率よく動作します。 |
NMALLOC_HEAPOPTION_CHECK_1 | 16bitのメタデータを2つ設定可能にします。メモリの先頭部分のデータ破壊を検出します。 |
NMallocSettings::size |
nmalloc
が利用する最大のメモリサイズを指定します。4096バイトの倍数を指定する必要があります。
NMALLOC_HEAPOPTION_ENABLE_ENV
が指定されている場合は、環境変数NLIB_NMALLOC_HEAPSIZE
を設定することにより、ソースコード上の設定を上書きすることが可能です。 ただし、addr
がNULL
でない場合のみ上書きされます。 © 2013, 2014, 2015 Nintendo Co., Ltd. All rights reserved.