鸿蒙HarmonyOS应用开发之内存管理purgeable内存开发指导

发布于:2024-04-01 ⋅ 阅读:(69) ⋅ 点赞:(0)

场景介绍

OpenHarmony提供Purgeable Memory内存管理机制,开发者可以使用相关接口创建PurgeableMemory对象,从而管理purgeable内存。

开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native层相关接口操作purgeable内存。功能包括purgeable内存的申请、释放等。

针对Purgeable Memory内存管理机制,常见的开发场景如下:

  • 通过该机制提供的NAPI接口申请管理PurgeableMemory对象,并将数据内容写入该对象。
  • 使用完毕后释放。

接口说明

接口名 描述
OH_PurgeableMemory *OH_PurgeableMemory_Create(size_t size, OH_PurgeableMemory_ModifyFunc func, void *funcPara) 创建PurgeableMemory对象,每次调用都会产生一个新的PurgeableMemory对象。
bool OH_PurgeableMemory_Destroy(OH_PurgeableMemory *purgObj) 对PurgeableMemory对象进行析构操作。
bool OH_PurgeableMemory_BeginRead(OH_PurgeableMemory *purgObj) 对PurgeableMemory对象进行读访问。
void OH_PurgeableMemory_EndRead(OH_PurgeableMemory *purgObj) 读操作结束,将PurgeableMemory对象的引用计数减1,当引用计数为0的时候, 该PurgeableMemory对象可以被系统回收。
bool OH_PurgeableMemory_BeginWrite(OH_PurgeableMemory *purgObj) 对PurgeableMemory对象进行写访问。
void OH_PurgeableMemory_EndWrite(OH_PurgeableMemory *purgObj) 写操作结束,将PurgeableMemory对象的引用计数减1,当引用计数为0的时候,该PurgeableMemory对象可以被系统回收。
void *OH_PurgeableMemory_GetContent(OH_PurgeableMemory *purgObj) 获取PurgeableMemory对象内存数据。
size_t OH_PurgeableMemory_ContentSize(OH_PurgeableMemory *purgObj) 获取PurgeableMemory对象内存数据大小。
bool OH_PurgeableMemory_AppendModify(OH_PurgeableMemory *purgObj, OH_PurgeableMemory_ModifyFunc func, void *funcPara) 添加PurgeableMemory对象的修改方法。

Purgeable Memory应用开发步骤

以下步骤描述了在OpenHarmony中如何使用Purgeable Memory提供的NAPI接口,申请PurgeableMemory对象,并将内容写入PurgeableMemory对象后,对相应对象进行读写访问。

  1. 声明PurgeableMemory对象创建规则。
// 声明构建函数的参数
struct ParaData{
    int start;
    int end;
};

// 声明一个使用ModifyFunc
bool FactorialFunc(void* data, size_t size, void* param){
    bool ret = true;
    ParaData *pdata = (ParaData*) param;
    int* oriData = (int*)data;
    int i = pdata->start;
    while(i<pdata->end){
        *oriData *= i;
        i++;
    }
    return ret;
}

// 声明修改PurgeableMemory对象扩展函数的参数
struct AppendParaData{
    int newPara;
};

// 声明修改PurgeableMemory对象的扩展函数
bool AddFunc(void* data, size_t size, void* param){
    bool ret = true;
    int *oriDatap = (int*) data;
    AppendParaData* apData = (AppendParaData*)param;
    *oriDatap += apData->newPara;
    return ret;
}
  1. 创建PurgeableMemory对象。
// 声明一个4MB的PurgeableMemory对象大小
#define DATASIZE (4 * 1024 * 1024)

// 声明创建函数的参数
struct ParaData pdata = {1,2};

// 创建一个PurgeableMemory对象
OH_PurgeableMemory* pPurgmem = OH_PurgeableMemory_Create(DATASIZE, FactorialFunc, &pdata);
  1. 读访问PurgeableMemory对象。
//业务定义对象类型
class ReqObj;

// 读取对象
OH_PurgeableMemory_BeginRead(pPurgmem);

// 获取PurgeableMemory对象大小
size_t size = OH_PurgeableMemory_ContentSize(pPurgmem);

// 获取PurgeableMemory对象内容
ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);

// 读取PurgeableMemory对象结束
OH_PurgeableMemory_EndRead(pPurgmem);
  1. 写访问PurgeableMemory对象。
 //业务定义对象类型
class ReqObj;

// 修改PurgeableMemory对象
OH_PurgeableMemory_BeginWrite(pPurgmem);

// 获取PurgeableMemory对象数据
ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);

// 声明扩展创建函数的参数
struct AppendParaData apdata = {1};

// 更新PurgeableMemory对象重建规则
OH_PurgeableMemory_AppendModify(pPurgmem, AddFunc, &apdata);

// 修改PurgeableMemory对象结束
OH_PurgeableMemory_EndWrite(pPurgmem);
  1. 销毁PurgeableMemory对象。
// 销毁对象
OH_PurgeableMemory_Destroy(pPurgmem);

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到