《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用_第1页
《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用_第2页
《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用_第3页
《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用_第4页
《鸿蒙智能互联设备开发(微课版)》 课件 4.4.3 动态管理接口及应用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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()动态管理接口及应用具体代码如下:

#include<stdio.h>

#include"los_memory.h"

#include"ohos_init.h"

#include"ohos_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;

}

/*内存地址读写验证*/

mem=test_ohos;//内存块存入数组

printf("\r\n*mem=%s\r\n",*mem);

/*释放内存*/

if(LOS_MemFree(oryMem,mem)!=LOS_OK){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论