CentralHeap
と対になって利用されるスレッド専用キャッシュクラスです。
[詳解]
#include "nn/nlib/heap/CachedHeap.h"
CentralHeap
と対になって利用されるスレッド専用キャッシュクラスです。
- 説明
nmalloc()
の実装に利用されていて、nmalloc()
はスレッドローカルストレージを用いてCachedHeap
のオブジェクトをスレッド毎に保持しています。
- 各スレッドごとに
CachedHeap
オブジェクトを用意してCachedHeap
を通じてメモリの確保と解放を行うことで必要な排他制御を減らすことが可能になり、マルチスレッド環境下で高速にメモリの確保と解放を行うことができます。 また、あるスレッドのCachedHeap
によって確保されたメモリを別スレッドのCachedHeap
に解放して返還することも可能です(CentralHeap
が同一の場合)。
CachedHeap.h の 31 行目に定義があります。
◆ Alloc() [1/2]
nn::nlib::heap::CachedHeap::Alloc |
( |
size_t |
n | ) |
|
|
noexcept |
指定バイト分のメモリ領域を確保します。
- 引数
-
- 戻り値
- 成功した場合は確保したメモリブロックを指すポインタ。失敗した場合は
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 |
メモリ領域を解放します。
- 引数
-
- 戻り値
- 0ならば正常にメモリが解放されています。それ以外ならばそもそも
p
が確保されていなかった等の問題が発見されました。
◆ FreeWithSize()
nn::nlib::heap::CachedHeap::FreeWithSize |
( |
void * |
p, |
|
|
size_t |
size |
|
) |
| |
|
noexcept |
確保されたサイズを指定してメモリ領域を解放します。
- 引数
-
[in] | p | 解放するメモリブロックのポインタ |
[in] | size | p に割り当てられたサイズ |
- 戻り値
- 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とは異なり、
ptr
にNULL
を指定できず、size
に0を指定できないことに注意してください。
◆ swap()
nn::nlib::heap::CachedHeap::swap |
( |
CachedHeap & |
rhs | ) |
|
|
inlinenoexcept |
このクラス詳解は次のファイルから抽出されました: