TNB Library
|
静的メモリ管理クラス [詳解]
#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) |
[取得] アドレス取得&ロック. [詳解] | |
CStaticMemory & | operator= (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() を使う必要は有りません。
おまけ(!)で、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 の 64 行目に定義があります。
enum EResult |
リザルト
列挙値 | |
---|---|
ER_Success | 成功 |
ER_ExistBank | すでにバンクがあります。 |
ER_NotFoundBank | バンクが見つかりません。 |
ER_OutOfMemory | メモリが足りません。 |
ER_InvalidTell | 不正なTELLです。 |
ER_InvalidParam | 不正なパラメータです。 |
ER_Locked | ロックされています。 |
TnbStaticMemory.h の 69 行目に定義があります。
~CStaticMemory | ( | void | ) |
デストラクタ
TnbStaticMemory.h の 668 行目に定義があります。
CStaticMemory | ( | void | ) |
コンストラクタ
TnbStaticMemory.h の 674 行目に定義があります。
CStaticMemory | ( | const CStaticMemory & | h | ) |
bool Allocate | ( | BYTE | bank, |
size_t | size | ||
) |
[取得] メモリ確保
bank | バンク |
size | サイズ |
true | 成功。 |
false | 失敗。 |
TnbStaticMemory.h の 761 行目に定義があります。
|
static |
[設定] バンク作成.
指定バンクの確保サイズを設定
bank | バンク |
dwSectorSize | セクタサイズ。16以上 |
wSectorCount | セクタ数。10以上 32768未満 |
ER_Success | 成功 |
ER_ExistBank | すでにバンクがあります。 |
ER_OutOfMemory | メモリが足りません。 |
ER_InvalidTell | 不正なTELLです。 |
ER_InvalidParam | 不正なパラメータです。 |
TnbStaticMemory.h の 628 行目に定義があります。
|
static |
[設定] バンク削除.
指定バンクの開放
bank | バンク |
boIsForce | 省略すると、 Lockチェックを行います。 true を指定すると、LockされていてもBankをDeleteします。 |
ER_Success | 成功 |
ER_NotFoundBank | バンクが見つかりません。 |
ER_Locked | ロックされています。 |
TnbStaticMemory.h の 643 行目に定義があります。
void Free | ( | void | ) |
LONG GetJointlyCount | ( | void | ) |
[取得] 共有数取得.
インスタンスをコピーすると、共有数が+1されます。 1の時、Free()かデストラクトすると、メモリが解放されます。
TnbStaticMemory.h の 733 行目に定義があります。
DWORD GetParam | ( | void | ) |
size_t GetSize | ( | void | ) |
[取得] 確保サイズ取得
0 | 確保していない。 |
0以上 | 確保Byte数 |
TnbStaticMemory.h の 808 行目に定義があります。
bool HasMemory | ( | void | ) |
LPVOID Lock | ( | void | ) |
[取得] アドレス取得&ロック.
NULL | エラー(カウンタは+1しません) |
NULL以外 | アドレス |
TnbStaticMemory.h の 825 行目に定義があります。
CStaticMemory & operator= | ( | const CStaticMemory & | other | ) |
|
static |
[設定] バンクのりサイズ.
bank | バンク |
wSectorCount | 変更したいセクタ数。省略可能。 |
ER_Success | 成功 |
ER_NotFoundBank | バンクが見つかりません。 |
ER_OutOfMemory | メモリが足りません。 |
ER_InvalidParam | 不正なパラメータです。 |
ER_Locked | ロックされています。 |
TnbStaticMemory.h の 662 行目に定義があります。
void SetParam | ( | DWORD | dwParam | ) |
void Unlock | ( | void | ) |