固定メモリサイズの領域を確保・解放をロックフリーで行うことのできるプールアロケータです。
[詳解]
#include "nn/nlib/LockFree.h"
固定メモリサイズの領域を確保・解放をロックフリーで行うことのできるプールアロケータです。
- 説明
- 通常、
malloc()
, free()
等は内部でスレッドがブロックされる可能性がありますが、LockFreeUnitHeap
はブロックする可能性なしにメモリの取得、解放を行うことができます。 スレッドがブロックされることが容認できない場合や、サイズが同一で比較的大きいサイズのメモリを動的に取得、解放したい場合にこのクラスの利用を検討するとよいでしょう。
- コード例
e = heap.Init(sizeof(MyStructure), 32, 1024);
}
.....
p = heap.Alloc();
if (!p) {
}
MyStructure* s = reinterpret_cast<MyStructure*>(p->Get());
.....
heap.Free(p);
LockFree.h の 799 行目に定義があります。
§ Alloc()
nn::nlib::LockFreeUnitHeap::Alloc |
( |
| ) |
|
|
inlinenoexcept |
メモリを割り当てます。スレッドセーフです。
- 戻り値
- 割り当てが成功した場合は
NULL
以外のポインタ
- 説明
- 戻り値の型(
MemHolder
)はこのクラスの内部クラスで、Get()
メンバ関数だけが利用できるクラスです。 返されたオブジェクトへのポインタに対してGet()
を実行して戻り値を取得することで割り当てた領域を得ることができます。
LockFree.h の 817 行目に定義があります。
§ AllocUnsafe()
nn::nlib::LockFreeUnitHeap::AllocUnsafe |
( |
| ) |
|
|
inlinenoexcept |
§ Free()
nn::nlib::LockFreeUnitHeap::Free |
( |
MemHolder * |
p | ) |
|
|
inlinenoexcept |
§ FreeUnsafe()
nn::nlib::LockFreeUnitHeap::FreeUnsafe |
( |
MemHolder * |
p | ) |
|
|
inlinenoexcept |
§ Init()
nn::nlib::LockFreeUnitHeap::Init |
( |
size_t |
unit_size, |
|
|
size_t |
align, |
|
|
size_t |
count |
|
) |
| |
|
noexcept |
アロケータを初期化します。スレッドセーフではありません。
- 引数
-
[in] | unit_size | 確保したい領域の1つあたりのサイズ |
[in] | align | 確保したい領域のアライメント |
[in] | count | 割り当てることのできる領域数の最大値 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリの確保に失敗した場合 |
EINVAL | アライメントが2のべき乗ではなかった場合 |
このクラス詳解は次のファイルから抽出されました: