文章目录 静态内存管理 开发配置 注意事项 LiteOS_华为云 静态内存管理:在静态内存池中分配用户初始化时预设的固定大小的内存块; 分配和释放效
文章目录
- 静态内存管理
- 开发配置
- 注意事项
- LiteOS_华为云
静态内存管理:在静态内存池中分配用户初始化时预设的固定大小的内存块;
- 分配和释放效率高,静态内存池中无碎片?;
- 只能申请到预设大小的内存块,不能按需申请;
静态内存管理
实质是一个静态数组,静态内存池内的块大小在初始化时设定,初始化后块大小不可变更。静态内存池有一个控制块和若干相同大小的内存块构成。
功能
接口名
描述
初始化静态内存
LOS_MemboxInit
初始化一个静态内存池,设定其起始地址、总大小及每个块大小
清除静态内存块内容
LOS_MemboxClr
清零指定静态内存块的内容
申请、释放静态内存
LOS_MemboxAlloc
从指定的静态内存池中申请一块静态内存块
申请、释放静态内存
LOS_MemboxFree
释放指定的一块静态内存块
获取、打印静态内存池信息
LOS_MemboxStatisticsGet
获取指定静态内存池的信息,包括内存池中总内存块数量、已经分配出去的内存块数量、每个内存块的大小
获取、打印静态内存池信息
LOS_ShowBox
打印指定静态内存池所有节点信息(打印等级是LOS_INFO_LEVEL),包括内存池起始地址、内存块大小、总内存块数量、每个空闲内存块的起始地址、所有内存块的起始地址
{
UINT32 uwBlkSize; /* 内存块的大小 */
UINT32 uwBlkNum; /* 内存块总数 */
UINT32 uwBlkCnt; /* 已经分配使用的块数 */
LOS_MEMBOX_NODE stFreeList; /* 内存控制块的空闲链表,指针指向下一个可用的内存块 */
} LOS_MEMBOX_INFO;
UINT32 LOS_MemboxInit(VOID *pBoxMem, /* 内存池地址,需要用户自定义 */
UINT32 uwBoxSize, /* 内存池大小 */
UINT32 uwBlkSize); /* 内存块大小 */
VOID LOS_MemboxClr(VOID *pBoxMem, /* 内存池地址 */
VOID *pBox) /* 需要释放的内存块 */
VOID *LOS_MemboxAlloc(VOID *pBoxMem) /* 指向内存池的指针 */
UINT32 LOS_MemboxFree(VOID *pBoxMem, /* 内存池地址 */
VOID *pBox) /* 需要释放的内存块 */
开发配置
make menuconfig: Kernel --> Memory Management
配置项
含义
取值范围
默认值
依赖
LOSCFG_KERNEL_MEMBOX
使能membox内存管理
YES/NO
YES
无
LOSCFG_KERNEL_MEMBOX_STATIC
选择静态内存方式实现membox
YES/NO
YES
LOSCFG_KERNEL_MEMBOX
LOSCFG_KERNEL_MEMBOX_DYNAMIC
选择动态内存方式实现membox
YES/NO
NO
LOSCFG_KERNEL_MEMBOX
- 规划一片内存区域作为静态内存池;
- LOS_MemboxInit 初始化静态内存池(内存池大小、内存块大小),将所有内存挂到空闲链表,在内存起始处放置控制头;
- LOS_MemboxAlloc 分配静态内存,系统将从空闲链表中取第一个空闲块,并返回该内存块的起始地址;
- LOS_MemboxClr 将入参地址对应的内存块清零;
- LOS_MemboxFree 将内存块加入空闲链表;
注意事项
…