CRI ADX  Last Updated: 2024-07-17 10:48 p
内存使用量


使用的内存

CRI Atom运行库不会在库内部动态分配内存(使用malloc函数等分配系统内存)。
CRI Atom运行库使用的内存区域和大小主要在初始化和调用句柄创建函数时指定。
详细请参照“ 关于工作区内存 ”。


计算方法

基本上可以通过设置各种Config结构体并调用各种CalculateWorkSize函数来计算。
文件大小也会影响读取文件。
需要工作内存的处理和工作内存计算函数如下。


<

需要工作内存的处理和工作内存大小计算函数
处理内容 处理函数 工作区内存计算函数
初始化程序库 criAtomEx_Initialize criAtomEx_CalculateWorkSize
创建流缓冲区 criAtomExDbas_Create criAtomExDbas_CalculateWorkSize
创建Voice池 criAtomExVoicePool_AllocateStandardVoicePool criAtomExVoicePool_CalculateWorkSizeForStandardVoicePool
  criAtomExVoicePool_AllocateAdxVoicePool criAtomExVoicePool_CalculateWorkSizeForAdxVoicePool
  criAtomExVoicePool_AllocateHcaVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaVoicePool
  criAtomExVoicePool_AllocateHcaMxVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaMxVoicePool
读取ACF文件 ::criAtomEx_RegisterAcfConfig ::criAtomEx_CalculateWorkSizeForRegisterAcfConfig
  criAtomEx_RegisterAcfData criAtomEx_CalculateWorkSizeForRegisterAcfData
  criAtomEx_RegisterAcfFile criAtomEx_CalculateWorkSizeForRegisterAcfFile
读取ACB文件 criAtomExAcb_LoadAcbData criAtomExAcb_CalculateWorkSizeForLoadAcbData
  criAtomExAcb_LoadAcbFile criAtomExAcb_CalculateWorkSizeForLoadAcbFile
创建AtomExPlayer 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)
Finalize the library
CriBool criAtomEx_Initialize(const CriAtomExConfig *config, void *work, CriSint32 work_size)
Initialize the library
#define criAtomEx_SetUserAllocator(p_malloc_func, p_free_func, p_obj)
Register a custom memory allocator
Definition: cri_le_atom_ex.h:309