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によるキャッシングを無効にします。 [詳解] | |
型定義 | |
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_PAGESUMMARY = 4, NMALLOC_DUMP_ALL = NMALLOC_DUMP_SPANS | NMALLOC_DUMP_POINTERS | NMALLOC_DUMP_PAGESUMMARY } |
nmalloc_query() 関数でNMALLOC_QUERY_DUMP を指定した場合に第2引数に指定する値の型です。 [詳解] | |
関数 | |
bool | operator== (const HeapHash &rhs, const HeapHash &lhs) |
2つのサマリを比較して等価ならば、true を返します。 | |
bool | operator!= (const HeapHash &rhs, const HeapHash &lhs) |
2つのサマリを比較して等価でなければ、true を返します。 | |
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 の初期化設定をコントロールすることができます。 [詳解] | |
エラーチェック及びデバック用関数 | |
errno_t | nmalloc_query (int query,...) |
ヒープに関する詳細なデータの取得や操作を行います。 [詳解] | |
heapライブラリ内にはCリンケージを持つnmalloc/nfree
等のmalloc関連関数群が定義されています。
#define NMALLOC_HEAPOPTION_CACHE_DISABLE (0x00000004) |
CachedHeapによるキャッシングを無効にします。
NMALLOC_HEAPOPTION_ENABLE_ENV
が指定されている場合は、環境変数NLIB_NMALLOC_DISABLE_TLSCACHE
に真偽値を設定することで、ソースコード上の設定を上書きすることが可能です。 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_query()
関数でNMALLOC_QUERY_DUMP
を指定した場合に第2引数に指定する値の型です。
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_get_settings | ( | NMallocSettings * | settings | ) |
ユーザーがこの関数を定義することでnmalloc
の初期化設定をコントロールすることができます。
[out] | settings | nmalloc の設定 |
nmalloc
の初期化設定を変更することができるようになります。 nmalloc_query | ( | int | query, |
... | |||
) |
ヒープに関する詳細なデータの取得や操作を行います。
[in] | query | クエリを表す整数値です。 |
[in,out] | ... | query の値に依存する引数を指定します。 |
0 | 成功しました。 |
EINVAL | クエリが正しくない場合(サポートされていない場合) |
query
引数によって、得られる情報、動作、及び以後に指定すべき引数が決まります。 詳細を以下のテーブルにまとめます。 query の値 | query の後に指定する引数 | 動作の説明 |
---|---|---|
NMALLOC_QUERY_DUMP | int 型のオプション(NMallocDumpMode 型の値)。その次に nlib_fd 型のファイルディスクリプタ(1で標準出力)。 | ヒープの状況をダンプします。 |
NMALLOC_QUERY_PAGE_SIZE | size_t へのポインタ | ヒープはページ単位でメモリを管理していますが、そのページのサイズを取得して引数に格納します。 |
NMALLOC_QUERY_ALLOCATED_SIZE | size_t へのポインタ | ユーザーによってアロケートされているサイズの合計を取得して引数に格納します。 |
NMALLOC_QUERY_FREE_SIZE | size_t へのポインタ | アロケートされていない領域のサイズの合計を取得して引数に格納します。 |
NMALLOC_QUERY_SYSTEM_SIZE | size_t へのポインタ | システムによって利用されているサイズの合計を取得して引数に格納します。 |
NMALLOC_QUERY_MAX_ALLOCATABLE_SIZE | size_t へのポインタ | アロケート可能な最大サイズを取得して引数に格納します。 |
NMALLOC_QUERY_IS_CLEAN | int へのポインタ | 実行後に引数に0以外が格納されている場合は、ヒープは初期化直後と同じ状態です。 ヒープの状態が初期化直後と同じかどうかをメタデータも含めて確認します。 従ってメモリリークしていなくても0を返す場合があります。 全てのメモリの解放後(nmalloc_query(NMALLOC_QUERY_FINALIZE_CACHE) によるスレッド毎のキャッシュの解放も含む)に呼び出すことで、ヒープの状態を厳密にチェックすることができます。 |
NMALLOC_QUERY_HEAP_HASH | HeapHash へのポインタ | 中央ヒープ(nn::nlib::heap::CentralHeap )の割り当て状況を調査し、サマリを計算します。 メモリリークの調査等に利用することが可能です。 ただし、各スレッドにキャッシュされている割り当て可能なメモリは確保されているものとしてサマリが計算されます。 従って、メモリリークしていないのにサマリが異なる、といった状況がありえます。 これを避けるにはオプションにNMALLOC_HEAPOPTION_CACHE_DISABLE を指定してヒープを初期化するか、事前にnlib_query(NMALLOC_QUERY_CLEAR_CACHE) を全てのスレッドで呼び出しておきます。 |
NMALLOC_QUERY_UNIFY_FREELIST | なし | 中央ヒープ内のフリーリストは通常はメモリの解放後も統合されません。 これは実行効率的にはよいのですが、メモリの断片化を悪化させる可能性があります。 このコマンドを実行することで、フリーリストを統合することができます。 |
NMALLOC_QUERY_SET_COLOR | 4096バイト以上のサイズでアロケートされたポインタと24bitの整数値 | アロケートされたメモリに24bitの整数値を関連付けます。 失敗した場合にはEINVAL を返します。 |
NMALLOC_QUERY_GET_COLOR | 4096バイト以上のサイズでアロケートされたポインタと24bitの整数値 | アロケートされたメモリに関連付けられた24bitの整数値を取得します。 失敗した場合にはEINVAL を返します。 |
NMALLOC_QUERY_SET_COLOR | 4096バイト以上のサイズでアロケートされたポインタと文字列 | アロケートされたメモリに16バイトまで(終端のヌル文字を含む)の文字列を関連付けます。 失敗した場合にはEINVAL を返します。 |
NMALLOC_QUERY_GET_NAME | 4096バイト以上のサイズでアロケートされたポインタとバッファへのポインタとバッファサイズ | アロケートされたメモリに関連付けられた文字列を取得します。 失敗した場合にはEINVAL を返します。 |
NMALLOC_QUERY_CHECK_CACHE | int へのポインタ | キャッシュされている割当可能なメモリのフリーリストをチェックします。 実行後に引数に0が格納されていた場合は何らかの原因でデータが壊れています。 |
NMALLOC_QUERY_CLEAR_CACHE | なし | 実行中のスレッドにキャッシュされている割り当て可能なメモリを中央ヒープに返します。 nmalloc は各スレッドに割り当て可能なメモリをキャッシュすることで高速化を行なっていますが、この関数を呼び出すことでキャッシュされている割り当て可能メモリを中央ヒープ(nn::nlib::heap::CentralHeap )に明示的に返却します。 |
NMALLOC_QUERY_FINALIZE_CACHE | なし | 実行中のスレッド固有のメモリをメタデータを含めて全て中央ヒープに返却します。 スレッドが終了するときに自動的に呼び出されます。 |
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によるキャッシングを無効にします。 |
NMallocSettings::size |
nmalloc
が利用する最大のメモリサイズを指定します。4096バイトの倍数を指定する必要があります。
NMALLOC_HEAPOPTION_ENABLE_ENV
が指定されている場合は、環境変数NLIB_NMALLOC_HEAPSIZE
を設定することにより、ソースコード上の設定を上書きすることが可能です。 ただし、addr
がNULL
でない場合のみ上書きされます。 © 2012-2016 Nintendo Co., Ltd. All rights reserved.