nlib
|
heap
ライブラリの名前空間です。nmalloc()
, nfree()
等はグローバル名前空間に定義されています。
[詳解]
クラス | |
class | CachedHeap |
CentralHeap と対になって利用されるスレッド専用キャッシュクラスです。 [詳解] | |
class | CentralHeap |
CachedHeap と対になって利用される中央ヒープクラスです。nmalloc() の実装に利用されています。 [詳解] | |
class | FrameHeap |
ヒープの両端からメモリを確保することができます。 [詳解] | |
class | StackHeap |
スタックに積み上げるようにメモリを確保していくアロケータです。 [詳解] | |
class | UnitHeap |
固定メモリサイズの領域を確保・解放するためのヒープです。所謂プールアロケータです。 [詳解] | |
heap
ライブラリの名前空間です。nmalloc()
, nfree()
等はグローバル名前空間に定義されています。
nmalloc()
, nfree()
は以下のような特長を備えています。 nmalloc_aligned()
を利用することでalignされた領域を確保可能です。 nrealloc()
は十分効率的に動作するreallocの実装です。 nmalloc_heaphash()
を利用することでヒープ全体の状況のハッシュを簡単に取ることができます。 nmalloc_walk_allocated_ptrs()
を利用することで、nmalloc()
されたポインタを順番に訪れることができます。リークしたメモリを強制的に解放する等の応用が可能です。 NMALLOC_HEAPOPTION_CHECK_1
オプションを指定することで、nmalloc
された各メモリに対して16bitの値を2つ付加できるようになります。 nmalloc()
, nfree()
は、nn::nlib::heap::CentralHeap
, nn::nlib::heap::CachedHeap
を用いて実装されています。 nmalloc()
, nfree()
に対応するCentralHeap
はプロセスに1つ、CachedHeap
はスレッドに1つで、プロセス内のコードはこれを共有する形になりますが、プログラマは直接これらのオブジェクトを別途作成し、自らヒープを作成してメモリの確保・解放を行うこともできます。nn::nlib::heap::StackHeap
: スタックに積み上げるようにメモリを確保するヒープです。 nn::nlib::heap::FrameHeap
: メモリ領域の上下からメモリを確保できるヒープです。 nn::nlib::heap::UnitHeap
: 固定サイズのメモリをアロケートするヒープです。 CachedHeap
を使えばそのようなロックは必要ない場合があります。 また、プログラムの作成当初はシングルスレッド専用のメモリのつもりで利用していても、確保したメモリの所有権を他のスレッドに渡す必要が出てくるかもしれません。 そのため、CentralHeap
, CachedHeap
を利用した方が却って高速であるという場合があることに注意してください。 © 2013, 2014, 2015 Nintendo Co., Ltd. All rights reserved.