nlib
nn::nlib::heap::CachedHeap クラスfinal

CentralHeapと対になって利用されるスレッド専用キャッシュクラスです。 [詳解]

#include "nn/nlib/heap/CachedHeap.h"

公開メンバ関数

void * Alloc (size_t n) noexcept
 指定バイト分のメモリ領域を確保します。 [詳解]
 
void * Alloc (size_t n, size_t algn) noexcept
 アライメントを指定してメモリ領域を確保します。 [詳解]
 
size_t GetAllocSize (const void *p) noexcept
 p に対して実際にアロケートされているメモリのサイズを返します。
 
errno_t Free (void *p) noexcept
 メモリ領域を解放します。 [詳解]
 
errno_t FreeWithSize (void *p, size_t size) noexcept
 確保されたサイズを指定してメモリ領域を解放します。 [詳解]
 
errno_t Realloc (void *ptr, size_t size, void **p) noexcept
 サイズを指定して指定したメモリの再割当てを行います。 [詳解]
 
基本的なメンバ関数
constexpr CachedHeap () noexcept
 デフォルトコンストラクタです。
 
 ~CachedHeap () noexcept
 デストラクタです。Finalize()を呼び出します。
 
CachedHeapassign (CachedHeap &rhs, move_tag)
 ムーブ代入演算子に相当します。
 
 CachedHeap (CachedHeap &rhs, move_tag)
 ムーブコンストラクタに相当します。
 
 CachedHeap (CachedHeap &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
CachedHeapoperator= (CachedHeap &&rhs)
 ムーブ代入演算子です。C++11の利用時に有効です。
 
void swap (CachedHeap &rhs) noexcept
 オブジェクトの内容をスワップします。 [詳解]
 
CachedHeapの初期化と終了

初期化については、CentralHeap::MakeCache()を利用してください。

void ReleaseAllCache () noexcept
 nmalloc_query(kNmallocQueryClearCache)に相当します。
 
void Finalize () noexcept
 nmalloc_query(kNmallocQueryFinalizeCache)に相当します。
 
エラーチェック
bool CheckCache () noexcept
 キャッシュの状態をチェックします。 [詳解]
 
 operator bool () const
 キャッシュがCentralHeap::MakeCache()により初期化されていればtrueを返します。
 

詳解

CentralHeapと対になって利用されるスレッド専用キャッシュクラスです。

説明
nmalloc()の実装に利用されていて、nmalloc()はスレッドローカルストレージを用いてCachedHeapのオブジェクトをスレッド毎に保持しています。
各スレッドごとにCachedHeapオブジェクトを用意してCachedHeapを通じてメモリの確保と解放を行うことで必要な排他制御を減らすことが可能になり、マルチスレッド環境下で高速にメモリの確保と解放を行うことができます。 また、あるスレッドのCachedHeapによって確保されたメモリを別スレッドのCachedHeapに解放して返還することも可能です(CentralHeapが同一の場合)。

CachedHeap.h31 行目に定義があります。

関数詳解

◆ Alloc() [1/2]

nn::nlib::heap::CachedHeap::Alloc ( size_t  n)
noexcept

指定バイト分のメモリ領域を確保します。

引数
[in]n確保したいメモリのバイトサイズ
戻り値
成功した場合は確保したメモリブロックを指すポインタ。失敗した場合はNULL

◆ Alloc() [2/2]

nn::nlib::heap::CachedHeap::Alloc ( size_t  n,
size_t  algn 
)
noexcept

アライメントを指定してメモリ領域を確保します。

引数
[in]n確保したいメモリのバイトサイズ
[in]algn確保したいメモリのアライメント
戻り値
成功した場合は確保したメモリブロックを指すポインタ。失敗した場合はNULL
説明
algn は2のべき乗でCentralHeap::kPageSize以下の値を指定する必要があります。

◆ CheckCache()

nn::nlib::heap::CachedHeap::CheckCache ( )
noexcept

キャッシュの状態をチェックします。

戻り値
キャッシュの状態が正常ならばtrueを返します。

◆ Free()

nn::nlib::heap::CachedHeap::Free ( void *  p)
noexcept

メモリ領域を解放します。

引数
[in]p解放するメモリブロックのポインタ
戻り値
0ならば正常にメモリが解放されています。それ以外ならばそもそもp が確保されていなかった等の問題が発見されました。

◆ FreeWithSize()

nn::nlib::heap::CachedHeap::FreeWithSize ( void *  p,
size_t  size 
)
noexcept

確保されたサイズを指定してメモリ領域を解放します。

引数
[in]p解放するメモリブロックのポインタ
[in]sizep に割り当てられたサイズ
戻り値
0ならば正常にメモリが解放されています。それ以外ならばそもそもp が確保されていなかった等の問題が発見されました。

◆ Realloc()

nn::nlib::heap::CachedHeap::Realloc ( void *  ptr,
size_t  size,
void **  p 
)
noexcept

サイズを指定して指定したメモリの再割当てを行います。

引数
[in]ptr再割当てを行うメモリへのポインタ
[in]size変更後のバイトサイズ
[out]p再確保されたメモリへのポインタ
戻り値
0ならば正常にメモリの再割当てが行われました。それ以外ならばそもそもptr が確保されていなかった等の問題が発見されました。
説明
標準のreallocとは異なり、ptrNULLを指定できず、size に0を指定できないことに注意してください。

◆ swap()

nn::nlib::heap::CachedHeap::swap ( CachedHeap rhs)
inlinenoexcept

オブジェクトの内容をスワップします。

非推奨:
この関数は将来のリリースにおいて削除されます。

CachedHeap.h36 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: