My Project  1.00
 全て クラス ファイル 関数 変数 グループ
構成 | 変数
メモリシステム

構成

class  OrgSys::Memory::IMemorySystem
 メモリシステム共通インターフェイス [詳細]
 

変数

const u16 OrgSys::Memory::cBlockMemoryUnit = 16
 アライメント及びサイズの最小単位
 
const u8 OrgSys::Memory::cAllocFillCodeValue =0xcd
 alloc時のFILL時の値(デバッグ用)
 
const u8 OrgSys::Memory::cFreeFillCodeValue =0xfd
 free時のFILL時の値(デバッグ用)
 

説明

メモリシステムは様々なメモリアロケーションタイプを統一形式で扱う為のインターフェースクラスです。
メモリの確保や解放などを全て同じ形式で取り扱えます。
コンストラクタやデストラクタなど new や delete のオーバーライドとして利用することで簡素ですっきりした独自のメモリ管理を実現する事ができます。

例えば new / delete は

inline void *operator new(Size_T n) throw(){
return OrgSys::Memory::IMemory::GetInst()->mallocAlignment(n);
}
inline void operator delete(void* p) throw() {
OrgSys::Memory::IMemory::GetInst()->free(p);
}

を用意する事で、通常のnew / deleteを差し替える事ができます。

IMemory は各種メモリシステムが共通で持つメソッドをまとめたインターフェイスクラスです。
IMemory はその実装クラスによって特徴が大きく変化します。

メモリープールの種類

クラス名 名称 用途 速度 断片化耐性
dlMallocMemory dlmallocメモリ 通常プログラム、データ用 普通 ややしやすい
externalMcbMemory 外部メモリ CPUが直接アクセスできないメモリの管理 低速 普通
fixedSizeMemory 固定サイズ割当メモリ 固定サイズの割当て 超高速 断片化しない

メモリシステムの作成

IMemory クラスを継承して各種メモリクラスに組み込む事で作成されます。

メモリシステムからのメモリ確保/解放

メモリからの確保は IMemory::mallocAlignment を使用します。 解放に関しては IMemory::free を使用します。

ここで注意しないといけないのは、確保と解放は同種のメモリシステム上で行う必要があります。
異なるメモリシステムで解放等を行うとメモリが破壊される恐れがありますので注意が必要です。