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() を呼び出します。
|
|
CachedHeap & | assign (CachedHeap &rhs, move_tag) |
| swapを利用したムーブにより代入します。
|
|
| CachedHeap (CachedHeap &rhs, move_tag) |
| swapを利用したムーブによりオブジェクトを構築します。
|
|
| CachedHeap (CachedHeap &&rhs) |
| ムーブコンストラクタです。C++11の利用時に有効です。
|
|
CachedHeap & | operator= (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が認識するポインタからオブジェクトへのポインタを得ます。 [詳解]
|
|
|
|
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.h の 19 行目に定義があります。
nn::nlib::heap::CachedHeap::Alloc |
( |
size_t |
n | ) |
|
|
noexcept |
指定バイト分のメモリ領域を確保します。
- 引数
-
- 戻り値
- 成功した場合は確保したメモリブロックを指すポインタ。失敗した場合は
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 |
メモリ領域を解放します。
- 引数
-
- 戻り値
- 0ならば正常にメモリが解放されています。それ以外ならばそもそも
p
が確保されていなかった等の問題が発見されました。
nn::nlib::heap::CachedHeap::FreeWithSize |
( |
void * |
p, |
|
|
size_t |
size |
|
) |
| |
|
noexcept |
確保されたサイズを指定してメモリ領域を解放します。
- 引数
-
[in] | p | 解放するメモリブロックのポインタ |
[in] | size | p に割り当てられたサイズ |
- 戻り値
- 0ならば正常にメモリが解放されています。それ以外ならばそもそも
p
が確保されていなかった等の問題が発見されました。
nn::nlib::heap::CachedHeap::GetMark |
( |
const void * |
ptr, |
|
|
uint16_t * |
mark1, |
|
|
uint16_t * |
mark2 |
|
) |
| |
|
noexcept |
アロケートされたメモリに付加された情報を取得します。
- 引数
-
[in] | ptr | アロケートしたオブジェクトのポインタ |
[out] | mark1 | 16bitの付加情報その1が格納されるポインタ。NULL指定可 |
[out] | mark2 | 16bitの付加情報その2が格納されるポインタ。NULL指定可 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | ptr がNULL だった場合 |
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_ptr | CentralHeapが認識するポインタ |
- 戻り値
- オブジェクトのポインタ
- 説明
指定されたオプション | 動作 |
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とは異なり、
ptr
にNULL
を指定できず、size
に0を指定できないことに注意してください。
nn::nlib::heap::CachedHeap::SetMark1 |
( |
void * |
ptr, |
|
|
uint16_t |
mark1 |
|
) |
| |
|
noexcept |
アロケートされたメモリに情報を付加します。
- 引数
-
[in] | ptr | アロケートしたオブジェクトのポインタ |
[in] | mark1 | 16bitの付加情報その1 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | ptr がNULL だった場合 |
- 説明
指定されたオプション | 動作 |
NMALLOC_HEAPOPTION_CHECK_0 | 何もせず0を返す |
NMALLOC_HEAPOPTION_CHECK_1 | 付加情報を設定 |
nn::nlib::heap::CachedHeap::SetMark2 |
( |
void * |
ptr, |
|
|
uint16_t |
mark2 |
|
) |
| |
|
noexcept |
アロケートされたメモリに情報を付加します。
- 引数
-
[in] | ptr | アロケートしたオブジェクトのポインタ |
[in] | mark2 | 16bitの付加情報その2 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | ptr がNULL だった場合 |
EFAULT | データ破壊が検出された場合 |
- 説明
指定されたオプション | 動作 |
NMALLOC_HEAPOPTION_CHECK_0 | 何もせず0を返す |
NMALLOC_HEAPOPTION_CHECK_1 | 付加情報を設定 |
このクラス詳解は次のファイルから抽出されました: