LiteOS动态内存申请与释放实验

配置信息:在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");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值