TNB Library
クラス | 公開型 | 公開メンバ関数 | 静的公開メンバ関数 | 全メンバ一覧
CStaticMemory クラス

静的メモリ管理クラス [詳解]

#include <TnbStaticMemory.h>

公開型

enum  EResult {
  ER_Success , ER_ExistBank , ER_NotFoundBank , ER_OutOfMemory ,
  ER_InvalidTell , ER_InvalidParam , ER_Locked
}
 リザルト [詳解]
 

公開メンバ関数

bool Allocate (BYTE bank, size_t size)
 [取得] メモリ確保 [詳解]
 
 CStaticMemory (const CStaticMemory &h)
 コピーコンストラクタ [詳解]
 
 CStaticMemory (void)
 コンストラクタ [詳解]
 
void Free (void)
 [取得] メモリ解放 [詳解]
 
LONG GetJointlyCount (void)
 [取得] 共有数取得. [詳解]
 
DWORD GetParam (void)
 [取得] パラメータ取得 [詳解]
 
size_t GetSize (void)
 [取得] 確保サイズ取得 [詳解]
 
bool HasMemory (void)
 [確認] メモリ保持確認 [詳解]
 
LPVOID Lock (void)
 [取得] アドレス取得&ロック. [詳解]
 
CStaticMemoryoperator= (const CStaticMemory &other)
 [代入] コピーオペレータ [詳解]
 
void SetParam (DWORD dwParam)
 [代入] パラメータ設定 [詳解]
 
void Unlock (void)
 [取得] アンロック [詳解]
 
 ~CStaticMemory (void)
 デストラクタ [詳解]
 

静的公開メンバ関数

static EResult CreateBank (BYTE bank, DWORD dwSectorSize, WORD wSectorCount)
 [設定] バンク作成. [詳解]
 
static EResult DeleteBank (BYTE bank, bool boIsForce=false)
 [設定] バンク削除. [詳解]
 
static EResult ResizeBank (BYTE bank, WORD wSectorCount=0)
 [設定] バンクのりサイズ. [詳解]
 

詳解

静的メモリ管理クラス

サイズの異なるバンクを最大256個作成し、指定のバンクから指定のサイズずつ分配して
使用することが出来ます。 new/delete を繰り返すことによるメモリの分断や、
メモリ確保速度が気になる場合に使用することが出来ます。

インスタンスは、 Allocate() することで領域を確保できます。
あるいは確保しているインスタンスをコピーすることでも確保できます
(この場合、同じ領域を参照している)。
確保している状態で Lock() をすることで実際のメモリアドレスが得られます。

不必要になれば、 Free() 、あるいはインスタンスをデストラクトします。

なお、 Lock() を Unlock() しないと、 ResizeBank() や DeleteBank() が出来なくなります。
逆にこれらを使わないのであれば、 Unlock() を使う必要は有りません。
覚え書き
領域を確保したしたインスタンスをコピーすると共有されます(二つから参照されている状態)。 そして、デストラクタや別のインスタンスのコピー、 Free()などで 参照ががなくなれば、そのメモリは自動的に解放されます。

おまけ(!)で、32BITのパラメータを持つことが出来ます。本クラスを関数の戻り値などに 使用する場合に、有効だと思います。

使用例

    CStaticMemory::CreateBank(0, 1000, 10);// Bank0に 1000x10バイトのメモリ確保
         ;
    CStaticMemory h1;
    h1.Allocate(0, 1000);                 // Bank0から 1000byte確保
    CStaticMemory h2 = h1;               // h1 と h2 は同じメモリを参照
    LPVOID P = h2.Lock();                // 実際のメモリアドレス取得&Lock
         ;
    h2.Unlock();                         // 使用後 Unlock(Bankを変更しないなら不必要)     
    
必要ファイル
TnbStaticMemory.h
日付
06/07/21 新規作成
06/07/23 デフラグできるように仕様修正。

TnbStaticMemory.h64 行目に定義があります。

列挙型メンバ詳解

◆ EResult

enum EResult

リザルト

列挙値
ER_Success 

成功

ER_ExistBank 

すでにバンクがあります。

ER_NotFoundBank 

バンクが見つかりません。

ER_OutOfMemory 

メモリが足りません。

ER_InvalidTell 

不正なTELLです。

ER_InvalidParam 

不正なパラメータです。

ER_Locked 

ロックされています。

TnbStaticMemory.h69 行目に定義があります。

構築子と解体子

◆ ~CStaticMemory()

~CStaticMemory ( void  )

デストラクタ

TnbStaticMemory.h668 行目に定義があります。

◆ CStaticMemory() [1/2]

CStaticMemory ( void  )

コンストラクタ

TnbStaticMemory.h674 行目に定義があります。

◆ CStaticMemory() [2/2]

CStaticMemory ( const CStaticMemory h)

コピーコンストラクタ

引数
hコピー元。

TnbStaticMemory.h683 行目に定義があります。

関数詳解

◆ Allocate()

bool Allocate ( BYTE  bank,
size_t  size 
)

[取得] メモリ確保

覚え書き
確保の前に、本インスタンスがメモリを持っていたら参照をやめます (参照がなくなればメモリは解放されます)。
引数
bankバンク
sizeサイズ
戻り値
true成功。
false失敗。

TnbStaticMemory.h761 行目に定義があります。

◆ CreateBank()

static EResult CreateBank ( BYTE  bank,
DWORD  dwSectorSize,
WORD  wSectorCount 
)
static

[設定] バンク作成.

指定バンクの確保サイズを設定

引数
bankバンク
dwSectorSizeセクタサイズ。16以上
wSectorCountセクタ数。10以上 32768未満
戻り値
ER_Success成功
ER_ExistBankすでにバンクがあります。
ER_OutOfMemoryメモリが足りません。
ER_InvalidTell不正なTELLです。
ER_InvalidParam不正なパラメータです。

TnbStaticMemory.h628 行目に定義があります。

◆ DeleteBank()

static EResult DeleteBank ( BYTE  bank,
bool  boIsForce = false 
)
static

[設定] バンク削除.

指定バンクの開放

引数
bankバンク
boIsForce省略すると、 Lockチェックを行います。
true を指定すると、LockされていてもBankをDeleteします。
戻り値
ER_Success成功
ER_NotFoundBankバンクが見つかりません。
ER_Lockedロックされています。

TnbStaticMemory.h643 行目に定義があります。

◆ Free()

void Free ( void  )

[取得] メモリ解放

覚え書き
本インスタンスがメモリを持っていたら参照をやめます (参照がなくなればメモリは解放されます)。

TnbStaticMemory.h786 行目に定義があります。

◆ GetJointlyCount()

LONG GetJointlyCount ( void  )

[取得] 共有数取得.

インスタンスをコピーすると、共有数が+1されます。 1の時、Free()かデストラクトすると、メモリが解放されます。

覚え書き
開発用のメソッドです。通常直接使いません。
戻り値
共有数

TnbStaticMemory.h733 行目に定義があります。

◆ GetParam()

DWORD GetParam ( void  )

[取得] パラメータ取得

戻り値
パラメータ

TnbStaticMemory.h712 行目に定義があります。

◆ GetSize()

size_t GetSize ( void  )

[取得] 確保サイズ取得

覚え書き
実際に確保要求のサイズではなく、セクタサイズの公倍数-4にパディングされます。
戻り値
0確保していない。
0以上確保Byte数

TnbStaticMemory.h808 行目に定義があります。

◆ HasMemory()

bool HasMemory ( void  )

[確認] メモリ保持確認

戻り値
true持っている。
false持っていない。

TnbStaticMemory.h747 行目に定義があります。

◆ Lock()

LPVOID Lock ( void  )

[取得] アドレス取得&ロック.

覚え書き
ロックカウンタを+1し、アドレスを返します。
戻り値
NULLエラー(カウンタは+1しません)
NULL以外アドレス

TnbStaticMemory.h825 行目に定義があります。

◆ operator=()

CStaticMemory & operator= ( const CStaticMemory other)

[代入] コピーオペレータ

引数
otherコピー元。
戻り値
自分の参照

TnbStaticMemory.h694 行目に定義があります。

◆ ResizeBank()

static EResult ResizeBank ( BYTE  bank,
WORD  wSectorCount = 0 
)
static

[設定] バンクのりサイズ.

覚え書き
小さくすることは禁止されています。
ロックしていると失敗します。
リサイズ時使用メモリを先頭に集めます(デフラグ)。
セクタ数を省略することで、数を変更せずデフラグのみ行います。
引数
bankバンク
wSectorCount変更したいセクタ数。省略可能。
戻り値
ER_Success成功
ER_NotFoundBankバンクが見つかりません。
ER_OutOfMemoryメモリが足りません。
ER_InvalidParam不正なパラメータです。
ER_Lockedロックされています。

TnbStaticMemory.h662 行目に定義があります。

◆ SetParam()

void SetParam ( DWORD  dwParam)

[代入] パラメータ設定

引数
dwParamパラメータ

TnbStaticMemory.h721 行目に定義があります。

◆ Unlock()

void Unlock ( void  )

[取得] アンロック

覚え書き
ロックカウンタをー1します。

TnbStaticMemory.h836 行目に定義があります。