《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用.pptx

《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用.pptx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

4.4.3动态管理接口及应用

通过本节学习,您可以:了解动态管理接口说明及应用

动态管理接口及应用OpenHarmonyLiteOS-M内核的动态内存模块提供了初始化内存池、申请释放动态内存、获取内存池信息、获取内存块信息等几种功能。1.动态内存管理接口功能分类接口名描述初始化和删除内存池LOS_MemInit初始化一块指定的动态内存池,大小为sizeLOS_MemDeInit删除指定内存池,仅打开编译控制开关LOSCFG_MEM_MUL_POOL时有效申请、释放动态内存LOS_MemAlloc从指定动态内存池中申请size长度的内存LOS_MemFree释放从指定动态内存中申请的内存LOS_MemRealloc按size大小重新分配内存块,并将原内存块内容拷贝到新内存块。如果新内存块申请成功,则释放原内存块

动态管理接口及应用功能分类接口名描述获取内存池信息LOS_MemPoolSizeGet获取指定动态内存池的总大小LOS_MemTotalUsedGet获取指定动态内存池的总使用量大小LOS_MemInfoGet获取指定内存池的内存结构信息,包括空闲内存大小、已使用内存大小、空闲内存块数量、已使用的内存块数量、最大的空闲内存块大小LOS_MemPoolList打印系统中已初始化的所有内存池,包括内存池的起始地址、内存池大小、空闲内存总大小、已使用内存总大小、最大的空闲内存块大小、空闲内存块数量、已使用的内存块数量。仅打开编译控制开关LOSCFG_MEM_MUL_POOL时有效。

动态管理接口及应用功能分类接口名描述获取内存块信息LOS_MemFreeNodeShow打印指定内存池的空闲内存块的大小及数量LOS_MemUsedNodeShow打印指定内存池的已使用内存块的大小及数量检查指定内存池的完整性LOS_MemIntegrityCheck对指定内存池做完整性检查,仅打开LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK时有效。增加非连续性内存区域LOS_MemRegionsAdd支持多段非连续性内存区域,把非连续性内存区域逻辑上整合为一个统一的内存池。仅打开LOSCFG_MEM_MUL_REGIONS时有效。

动态管理接口及应用动态内存管理的一般开发流程:初始化LOS_MemInit。初始一个内存池后生成一个内存池控制头、尾节点EndNode,剩余的内存被标记为FreeNode内存节点。EndNode作为内存池末尾的节点,size为0。申请任意大小的动态内存LOS_MemAlloc。判断动态内存池中是否存在大于申请量大小的空闲内存块空间,若存在,则划出一块内存块,以指针形式返回,若不存在,返回NULL。如果空闲内存块大于申请量,需要对内存块进行分割,剩余的部分作为空闲内存块挂载到空闲内存链表上。释放动态内存LOS_MemFree。回收内存块,供下一次使用。调用LOS_MemFree释放内存块,则会回收内存块,并且将其标记为FreeNode。在回收内存块时,相邻的FreeNode会自动合并。

动态管理接口及应用动态内存管理应用:初始化一个动态内存池:LOS_MemInit()从动态内存池中申请一个内存块:LOS_MemAlloc()在内存块中存放一个数据打印出内存块中的数据:printf()释放该内存块:LOS_MemFree()

动态管理接口及应用具体代码如下:#includestdio.h#includelos_memory.h#includeohos_init.h#includeohos_types.h/*内存管理函数*/voidMemory_hi(void){UINT32*mem=NULL;UINT32POOL_SIZE=1024;//内存池大小UINT32oryMem[POOL_SIZE];//内存池地址UINT8test_ohos[10]={hiohos};//测试数组/*初始化内存池*/if(LOS_MemInit(oryMem,POOL_SIZE)!=LOS_OK){printf(Meminitfailed!\r\n);return;}

动态管理接口及应用/**申请内存块**/mem=(UINT32*)LOS_MemAlloc(oryMem,10);if(mem==NULL){printf(Memallocfailed!\r\n);return;

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档