CachedHeap
と対になって利用される中央ヒープクラスです。nmalloc()
の実装に利用されています。
[詳解]
#include "nn/nlib/heap/CentralHeap.h"
|
static const size_t | kPageSize |
| ヒープのページサイズです(OSのページサイズとの関連性はありません)。
|
|
CachedHeap
と対になって利用される中央ヒープクラスです。nmalloc()
の実装に利用されています。
- 説明
- 各スレッド専用のヒープである
CachedHeap
を作成することができます。 CachedHeap
が中央ヒープからメモリを取得したり返却したりします。 ユーザーのメモリ確保と解放は 基本的にCachedHeap
を通じて行います。 CentralHeap
から直接メモリを確保することもできますが、効率は落ちます。
CentralHeap.h の 31 行目に定義があります。
◆ Alloc() [1/2]
nn::nlib::heap::CentralHeap::Alloc |
( |
size_t |
n | ) |
|
|
inlinenoexcept |
メモリブロックを確保します。
- 引数
-
- 戻り値
- 確保されたメモリへのポインタ。失敗した場合は
NULL
CentralHeap.h の 41 行目に定義があります。
◆ Alloc() [2/2]
nn::nlib::heap::CentralHeap::Alloc |
( |
size_t |
n, |
|
|
size_t |
algn |
|
) |
| |
|
noexcept |
アライメントを指定してメモリブロックを確保します。
- 引数
-
[in] | n | メモリブロックのサイズ |
[in] | algn | アライメント |
- 戻り値
- 確保されたメモリへのポインタ。失敗した場合は
NULL
- 指定できるアライメントは2のべき乗である必要があります。
◆ Free()
nn::nlib::heap::CentralHeap::Free |
( |
void * |
p | ) |
|
|
noexcept |
メモリを解放します。
- 引数
-
- 戻り値
- 0ならば成功。0以外の場合はポインタがヒープに存在しない等のエラーが発生しています。
◆ FreeWithSize()
nn::nlib::heap::CentralHeap::FreeWithSize |
( |
void * |
p, |
|
|
size_t |
size |
|
) |
| |
|
noexcept |
確保されたサイズを指定してメモリ領域を解放します。
- 引数
-
[in] | p | 解放するメモリブロックのポインタ |
[in] | size | p に割り当てられたサイズ |
- 戻り値
- 0ならば正常にメモリが解放されています。それ以外ならばそもそも
p
が確保されていなかった等の問題が発見されました。
◆ Init()
nn::nlib::heap::CentralHeap::Init |
( |
void * |
start, |
|
|
size_t |
size, |
|
|
uint32_t |
heap_option |
|
) |
| |
|
noexcept |
ヒープを初期化します。
- 引数
-
- 戻り値
- 0ならば初期化が成功しています。それ以外ならば失敗しています。
- 説明
start
が kPageSize
でアライメントされていない場合は、領域が切り詰められて利用されます。
◆ MakeCache()
nn::nlib::heap::CentralHeap::MakeCache |
( |
CachedHeap * |
ptr | ) |
|
|
noexcept |
◆ Realloc()
nn::nlib::heap::CentralHeap::Realloc |
( |
void * |
ptr, |
|
|
size_t |
size, |
|
|
void ** |
p |
|
) |
| |
|
noexcept |
サイズを指定して指定したメモリの再割当てを行います。
- 引数
-
[in] | ptr | 再割当てを行うメモリへのポインタ |
[in] | size | 変更後のバイトサイズ |
[out] | p | 再確保されたメモリへのポインタ |
- 戻り値
- 0ならば正常にメモリの再割当てが行われました。それ以外ならばそもそも
ptr
が確保されていなかった等の問題が発見されました。
- 説明
- 標準のreallocとは異なり、
ptr
にNULL
を指定できず、size
に0を指定できないことに注意してください。
このクラス詳解は次のファイルから抽出されました: