CRI ADX  Last Updated: 2024-09-25 17:41 p
メモリ使用量


使用するメモリ

CRI Atomライブラリは、ライブラリ内部での動的なメモリ確保(malloc関数等によるシステムのメモリ確保)は行いません。
CRI Atomライブラリが使用するメモリ領域とサイズは、主に初期化やハンドル作成の関数呼び出し時に指定します。
詳細については「 ワークメモリについて 」を参照してください。


計算方法

基本的には、各種Config構造体を設定し、各種CalculateWorkSize関数を呼び出すことで計算できます。
ファイルを読み込むものに関しては、ファイルサイズも影響します。
ワークメモリを必要とする処理とワークメモリ計算関数を以下に示します。


<

ワークメモリを必要とする処理とワークメモリサイズ計算関数
処理内容 処理関数 ワークメモリ計算関数
ライブラリの初期化 criAtomEx_Initialize criAtomEx_CalculateWorkSize
ストリーミングバッファ作成 ::criAtomExDbas_Create ::criAtomExDbas_CalculateWorkSize
ボイスプール作成 criAtomExVoicePool_AllocateStandardVoicePool criAtomExVoicePool_CalculateWorkSizeForStandardVoicePool
  criAtomExVoicePool_AllocateAdxVoicePool criAtomExVoicePool_CalculateWorkSizeForAdxVoicePool
  criAtomExVoicePool_AllocateHcaVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaVoicePool
  criAtomExVoicePool_AllocateHcaMxVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaMxVoicePool
ACFファイルの読み込み criAtomEx_RegisterAcfData criAtomEx_CalculateWorkSizeForRegisterAcfData
  criAtomEx_RegisterAcfFile criAtomEx_CalculateWorkSizeForRegisterAcfFile
ACBファイルの読み込み criAtomExAcb_LoadAcbData criAtomExAcb_CalculateWorkSizeForLoadAcbData
  criAtomExAcb_LoadAcbFile criAtomExAcb_CalculateWorkSizeForLoadAcbFile
AtomExプレーヤ作成 criAtomExPlayer_Create criAtomExPlayer_CalculateWorkSize


また、 User Allocator方式を使用し、以下のような関数を登録することで、現在使用中のメモリサイズを取得することができます。


static CriUint32 usermem_allocated_size = 0;
void userMem_Initialize(void)
{
usermem_allocated_size = 0;
}
void userMem_Finalize(void)
{
if (usermem_allocated_size != 0) {
/* エラー */
}
}
CriUint32 userMem_GetAllocatedMemorySize(void)
{
return usermem_allocated_size;
}
void *userMem_Alloc(void *obj, CriUint32 size)
{
void* mem = malloc(size + sizeof(CriUint32));
void* ptr = CRI_NULL;
if (mem != CRI_NULL) {
usermem_allocated_size += size;
ptr = (void*)((CriUintPtr)mem + sizeof(CriUint32));
*(CriUint32*)mem = size;
}
return ptr;
}
void userMem_Free(void *obj, void *buf)
{
Uint32 size;
void* mem;
if (buf != NULL) {
mem = (void*)((CriUintPtr)buf - sizeof(CriUint32));
size = *(CriUint32*)mem;
usermem_allocated_size -= size;
free(mem);
}
}
main()
{
userMem_Initialize();
// 独自のメモリアロケーターを登録
criAtomEx_SetUserAllocator(userMem_Alloc, userMem_Free, NULL);
// ライブラリの初期化
// ワークメモリにはNULLと0を指定する。
// →必要なメモリは、登録したメモリ確保関数を使って確保される。
criAtomEx_Initialize(NULL, NULL, 0);
:
// アプリケーションのメイン処理
:
// アプリケーションを終了する際に終了処理を行う
// →初期化時に確保されたメモリは、登録したメモリ解放関数を使って解放される。
:
userMem_Finalize();
}
void criAtomEx_Finalize(void)
ライブラリの終了
CriBool criAtomEx_Initialize(const CriAtomExConfig *config, void *work, CriSint32 work_size)
ライブラリの初期化
#define criAtomEx_SetUserAllocator(p_malloc_func, p_free_func, p_obj)
ユーザアロケーターの登録
Definition: cri_le_atom_ex.h:313