前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0

20.2. SophiaFramework のメモリ追跡機能

SophiaFramework には、C++ 言語の全てのメモリ操作について、 Brew エミュレータ上でのメモリ追跡機能を提供しています。

20.2.1. MemoryAllocate マクロ

MemoryAllocate マクロは、 BREW エミュレータ上でのメモリ追跡が可能な メモリ割り当て機能を提供します。

このマクロはメモリの初期化を行いません。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合は SFDWatcher::malloc に、 TARGET_ENVIRONMENT_PHYSICAL マクロが定義されている場合は SFXHelper::malloc に 置き換えられます。

使用例

このマクロは次のように使用します。

SInt16Ptr p = reinterpret_cast<SInt16Ptr>(MemoryAllocate(sizeof(SInt16) * 256));

この例では、SInt16 256個分のメモリを確保しています。

[Caution] MALLOC、ERR_MALLOC について

SophiaFramework では、MALLOC と ERR_MALLOC は使用できません。 MemoryAllocate マクロを使用してください。

20.2.2. MemoryReallocate マクロ

MemoryReallocate マクロは、 BREW エミュレータ上でのメモリ追跡が可能な メモリ再割り当て機能を提供します。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合は SFDWatcher::realloc に、 TARGET_ENVIRONMENT_PHYSICAL マクロが定義されている場合は SFXHelper::realloc に 置き換えられます。

このマクロで新規のメモリを割り当てる場合、 メモリの初期化は行われません。

使用例

このマクロは次のように使用します。

SInt16Ptr p = reinterpret_cast<SInt16Ptr>(MemoryAllocate(sizeof(SInt16) * 256));
...
p = reinterpret_cast<SInt16Ptr>(MemoryReallocate(p, sizeof(SInt16) * 4096));

この例では、初めに SInt16 256 個分のメモリを確保した後しばらくして、 その領域を SInt16 4096 個分に広げます。

[Caution] REALLOC、ERR_REALLOC について

SophiaFramework では、REALLOC と ERR_REALLOC は使用できません。 MemoryReallocate マクロを使用してください。

20.2.3. MemoryFree マクロ

MemoryFree マクロは、 BREW エミュレータ上でのメモリ追跡が可能な メモリ解放機能を提供します。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合は SFDWatcher::free に、 TARGET_ENVIRONMENT_PHYSICAL マクロが定義されている場合は SFXHelper::free に 置き換えられます。

使用例

このマクロは次のように使用します。

SInt16Ptr p = reinterpret_cast<SInt16Ptr>(MemoryAllocate(sizeof(SInt16) * 256));
...
MemoryFree(p);

この例では、予め確保されたメモリ領域を解放しています。

[Caution] BREW ヘルパー関数の FREE について

SophiaFramework では、BREW ヘルパー関数の FREE は使用できません。 MemoryFree マクロを使用してください。

20.2.4. new/delete 演算子

SophiaFramework ではその内部で new/delete 演算子を定義しています。 これらの演算子は TARGET_ENVIRONMENT_SIMULATOR/TARGET_ENVIRONMENT_PHYSICAL マクロの定義にあわせてメモリ追跡機能を有効/無効にします。 各マクロと呼ばれる関数との関係は次の通りです。

演算子 TARGET_ENVIRONMENT_SIMULATOR (メモリ追跡機能有効) TARGET_ENVIRONMENT_PHYSICAL (メモリ追跡機能無効)
new SFDWatcher::malloc SFXHelper::malloc
delete SFDWatcher::free SFXHelper::free

因みに、コンストラクタに初期化コードを記述しない限り、 new 演算子によるメモリの初期化は行われません。

20.2.5. SophiaFramework では使用できない、メモリ関連のヘルパー関数

安全性を考慮して、SophiaFramework ではメモリの割り当てや解放を行う、 あるいはその内部で割り当てや解放を行う BREW ヘルパー関数は 使用できないようになっています。

以下の関数は使用できないマクロおよびヘルパー関数と、 推奨されるその代替のマクロ・演算子・関数・クラスです。

使用できないヘルパー関数 代替案
MALLOC、ERR_MALLOC MemoryAllocate / new
REALLOC、ERR_REALLOC MemoryReallocate
FREE MemoryFree / new
STRDUP、ERR_STRDUP SFXAnsiString
WSTRDUP SFXWideString

20.2.6. BREW エミュレータ上でのメモリ追跡機能

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている状態で、 メモリ操作について SFDWatcher クラスを使うと、BREW エミュレータ上でメモリの追跡を行うことができます。

詳しくは SFDWatcher をご覧ください。