nlib
nn::nlib::heap::CentralHeap クラスfinal

CachedHeapと対になって利用される中央ヒープクラスです。nmalloc()の実装に利用されています。 [詳解]

#include "nn/nlib/heap/CentralHeap.h"

公開メンバ関数

void * Alloc (size_t n) noexcept
 メモリブロックを確保します。 [詳解]
 
void * Alloc (size_t n, size_t algn) noexcept
 アライメントを指定してメモリブロックを確保します。 [詳解]
 
errno_t Free (void *p) noexcept
 メモリを解放します。 [詳解]
 
errno_t FreeWithSize (void *p, size_t size) noexcept
 確保されたサイズを指定してメモリ領域を解放します。 [詳解]
 
size_t GetAllocSize (const void *p) noexcept
 p に対して実際にアロケートされているメモリのサイズを返します。
 
errno_t Realloc (void *ptr, size_t size, void **p) noexcept
 サイズを指定して指定したメモリの再割当てを行います。 [詳解]
 
errno_t WalkAllocatedPtrs (nmalloc_heapwalk_callback func, void *user_ptr) noexcept
 詳しくは、nmalloc_walk_allocated_ptrs()を御覧ください。
 
基本的なメンバ関数
 CentralHeap () noexcept
 デフォルトコンストラクタです。
 
 ~CentralHeap () noexcept
 デストラクタです。
 
初期化と終了
errno_t Init (void *start, size_t size, uint32_t heap_option) noexcept
 ヒープを初期化します。 [詳解]
 
void Finalize () noexcept
 ヒープの利用を終了し、オブジェクトの状態を初期化以前の状態に変更します。
 
bool MakeCache (CachedHeap *ptr) noexcept
 CachedHeapを初期化してこのCentralHeapに関連付けます。 [詳解]
 

静的公開変数類

static const size_t kPageSize
 ヒープのページサイズです(OSのページサイズとの関連性はありません)。
 

詳解

CachedHeapと対になって利用される中央ヒープクラスです。nmalloc()の実装に利用されています。

説明
各スレッド専用のヒープであるCachedHeapを作成することができます。 CachedHeapが中央ヒープからメモリを取得したり返却したりします。 ユーザーのメモリ確保と解放は 基本的にCachedHeapを通じて行います。 CentralHeapから直接メモリを確保することもできますが、効率は落ちます。

CentralHeap.h18 行目に定義があります。

関数詳解

§ Alloc() [1/2]

nn::nlib::heap::CentralHeap::Alloc ( size_t  n)
inlinenoexcept

メモリブロックを確保します。

引数
[in]nメモリブロックのサイズ
戻り値
確保されたメモリへのポインタ。失敗した場合はNULL

CentralHeap.h30 行目に定義があります。

§ 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

メモリを解放します。

引数
[in]p解放するメモリブロックのポインタ
戻り値
0ならば成功。0以外の場合はポインタがヒープに存在しない等のエラーが発生しています。

§ FreeWithSize()

nn::nlib::heap::CentralHeap::FreeWithSize ( void *  p,
size_t  size 
)
noexcept

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

引数
[in]p解放するメモリブロックのポインタ
[in]sizep に割り当てられたサイズ
戻り値
0ならば正常にメモリが解放されています。それ以外ならばそもそもp が確保されていなかった等の問題が発見されました。

§ Init()

nn::nlib::heap::CentralHeap::Init ( void *  start,
size_t  size,
uint32_t  heap_option 
)
noexcept

ヒープを初期化します。

引数
[in]startヒープの開始位置のポインタです。
[in]sizeヒープのサイズです。 kPageSizeの倍数である必要があります。
[in]heap_optionヒープの構築オプションです。NMallocSettings::heap_optionを参照してください。
戻り値
0ならば初期化が成功しています。それ以外ならば失敗しています。
説明
startkPageSizeでアライメントされていない場合は、領域が切り詰められて利用されます。

§ MakeCache()

nn::nlib::heap::CentralHeap::MakeCache ( CachedHeap ptr)
noexcept

CachedHeapを初期化してこのCentralHeapに関連付けます。

引数
[out]ptr初期化するCachedHeapオブジェクトへのポインタ
戻り値
成功した場合はtrueを返します。
説明
この関数が呼ばれると中央ヒープはキャッシュ領域を確保してCachedHeapと自らを関連付けます。以降はCachedHeapを用いてメモリの確保と解放を行うことが可能となります。

§ Realloc()

nn::nlib::heap::CentralHeap::Realloc ( void *  ptr,
size_t  size,
void **  p 
)
noexcept

サイズを指定して指定したメモリの再割当てを行います。

引数
[in]ptr再割当てを行うメモリへのポインタ
[in]size変更後のバイトサイズ
[out]p再確保されたメモリへのポインタ
戻り値
0ならば正常にメモリの再割当てが行われました。それ以外ならばそもそもptr が確保されていなかった等の問題が発見されました。
説明
標準のreallocとは異なり、ptrNULLを指定できず、size に0を指定できないことに注意してください。

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