配置信息:在Los_config.h中有相关宏定义:
OS_SYS_MEM_ADDR 内存初始化起始地址
OS_SYS_MEM_SIZE 内存申请默认长度
内存池结构:内存池分为三部分
第一部分是内存池信息:内存池地址和大小
第二部分存储27个链表头,这里涉及到LiteOS内存管理的bestfit算法,内存块按大小划分:size=2^N,N的取值为4~30,故size的范围为16B~1024MB,第一个链表头指向的内存小于16B,第二个链表头指向内存16B~32B之间的.......,以此类推,不同大小的内存块有相应的链表指向,有效避免内存泄漏。
第三部分是若干个内存块,初始化内存池时,内存是一整块,根据其大小级别挂在相应的链表(第二部分的链表头)下。
功能说明:初始化一个内存池;申请一个内存块;对内存块赋值;释放内存
代码讲解:
void los_memory_test(void)
{
UINT32 *p_num = NULL;
UINT32 uwRet;
uwRet = Los_MemInit(OS_SYS_MEM_ADDR, 32); //初始化内存池
if (uwRet != LOS_OK) {
dprintf("内存池初始化失败!\n");
}
p_num = (int*)Los_MemAlloc(OS_SYS_MEM_ADDR, 4); //内存块申请
if (p_num == NULL) {
dprintf("内存块申请失败!\n");
}
*p_num = 666;
dprintf("当前申请的内存块存储的数据为:p_num = %d\n", *p_num);
uwRet = Los_MemFree(OS_SYS_MEM_ADDR, p_num);
if (uwRet != LOS_OK) {
dprintf("内存块释放失败!\n");
}
}