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
 サイズを指定して指定したメモリの再割当てを行います。 [詳解]
 
基本的なメンバ関数
 CachedHeap () noexcept
 デフォルトコンストラクタです。
 
 ~CachedHeap () noexcept
 デストラクタです。Finalize()を呼び出します。
 
CachedHeapassign (CachedHeap &rhs, move_tag)
 swapを利用したムーブにより代入します。
 
 CachedHeap (CachedHeap &rhs, move_tag)
 swapを利用したムーブによりオブジェクトを構築します。
 
 CachedHeap (CachedHeap &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
CachedHeapoperator= (CachedHeap &&rhs)
 ムーブ代入演算子です。C++11の利用時に有効です。
 
void swap (CachedHeap &rhs) noexcept
 オブジェクトの内容をスワップします。
 
アロケートされたメモリへのメタデータの付加

CachedHeapの構築時の設定によっては、ユーザーがメタデータを付加することができます。

errno_t SetMark1 (void *ptr, uint16_t mark1) noexcept
 アロケートされたメモリに情報を付加します。 [詳解]
 
errno_t SetMark2 (void *ptr, uint16_t mark2) noexcept
 アロケートされたメモリに情報を付加します。 [詳解]
 
errno_t GetMark (const void *ptr, uint16_t *mark1, uint16_t *mark2) noexcept
 アロケートされたメモリに付加された情報を取得します。 [詳解]
 
void * GetObjPtr (void *raw_ptr) noexcept
 CentralHeapが認識するポインタからオブジェクトへのポインタを得ます。 [詳解]
 
CachedHeapの初期化と終了

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

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

詳解

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

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

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

関数詳解

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

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

引数
[in]n確保したいメモリのバイトサイズ
戻り値
成功した場合は確保したメモリブロックを指すポインタ。失敗した場合はNULL
nn::nlib::heap::CachedHeap::Alloc ( size_t  n,
size_t  algn 
)
noexcept

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

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

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

戻り値
キャッシュの状態が正常ならばtrueを返します。
nn::nlib::heap::CachedHeap::Free ( void *  p)
noexcept

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

引数
[in]p解放するメモリブロックのポインタ
戻り値
0ならば正常にメモリが解放されています。それ以外ならばそもそもp が確保されていなかった等の問題が発見されました。
nn::nlib::heap::CachedHeap::FreeWithSize ( void *  p,
size_t  size 
)
noexcept

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

引数
[in]p解放するメモリブロックのポインタ
[in]sizep に割り当てられたサイズ
戻り値
0ならば正常にメモリが解放されています。それ以外ならばそもそもp が確保されていなかった等の問題が発見されました。
nn::nlib::heap::CachedHeap::GetMark ( const void *  ptr,
uint16_t *  mark1,
uint16_t *  mark2 
)
noexcept

アロケートされたメモリに付加された情報を取得します。

引数
[in]ptrアロケートしたオブジェクトのポインタ
[out]mark116bitの付加情報その1が格納されるポインタ。NULL指定可
[out]mark216bitの付加情報その2が格納されるポインタ。NULL指定可
戻り値
0成功した場合
EINVALptrNULLだった場合
EFAULTデータ破壊が検出された場合
説明
指定されたオプション 動作
NMALLOC_HEAPOPTION_CHECK_0 mark1, mark2に0を設定
NMALLOC_HEAPOPTION_CHECK_1 mark1, mark2に設定された付加情報を設定
nn::nlib::heap::CachedHeap::GetObjPtr ( void *  raw_ptr)
noexcept

CentralHeapが認識するポインタからオブジェクトへのポインタを得ます。

引数
[in]raw_ptrCentralHeapが認識するポインタ
戻り値
オブジェクトのポインタ
説明
指定されたオプション 動作
NMALLOC_HEAPOPTION_CHECK_0 raw_ptrと同じポインタ
NMALLOC_HEAPOPTION_CHECK_1 オブジェクトへのポインタ
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を指定できないことに注意してください。
nn::nlib::heap::CachedHeap::SetMark1 ( void *  ptr,
uint16_t  mark1 
)
noexcept

アロケートされたメモリに情報を付加します。

引数
[in]ptrアロケートしたオブジェクトのポインタ
[in]mark116bitの付加情報その1
戻り値
0成功した場合
EINVALptrNULLだった場合
説明
指定されたオプション 動作
NMALLOC_HEAPOPTION_CHECK_0 何もせず0を返す
NMALLOC_HEAPOPTION_CHECK_1 付加情報を設定
nn::nlib::heap::CachedHeap::SetMark2 ( void *  ptr,
uint16_t  mark2 
)
noexcept

アロケートされたメモリに情報を付加します。

引数
[in]ptrアロケートしたオブジェクトのポインタ
[in]mark216bitの付加情報その2
戻り値
0成功した場合
EINVALptrNULLだった場合
EFAULTデータ破壊が検出された場合
説明
指定されたオプション 動作
NMALLOC_HEAPOPTION_CHECK_0 何もせず0を返す
NMALLOC_HEAPOPTION_CHECK_1 付加情報を設定

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