鸿蒙(API 12 Beta2版)NDK开发【内存管理purgeable内存开发指导】

news2024/10/2 12:17:36

场景介绍

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

开发者可以通过本指导了解在HarmonyOS应用中,如何使用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应用开发步骤

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

  1. 声明PurgeableMemory对象创建规则。

    // 声明构建函数的参数struct ParaData{    int start;    int end;};
    // 声明一个使用ModifyFuncbool 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;}
    
  2. 创建PurgeableMemory对象。

    // 声明一个4MB的PurgeableMemory对象大小#define DATASIZE (4 * 1024 * 1024)
    // 声明创建函数的参数struct ParaData pdata = {1,2};
    // 创建一个PurgeableMemory对象OH_PurgeableMemory* pPurgmem = OH_PurgeableMemory_Create(DATASIZE, FactorialFunc, &pdata);
    
  3. 读访问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);
    
  4. 写访问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);
    
  5. 销毁PurgeableMemory对象。

    // 销毁对象OH_PurgeableMemory_Destroy(pPurgmem);// 置空指针防止UAFpPurgmem = nullptr;
    

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter-Notebook常用操作看这一篇就够啦

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Jupyter-Notebook常用操作看这一篇就够啦 文章目录 01 概括02 快捷键总结03 运行外部python文件04 魔法命令4.1 运行计时4.2 查看变量与函数4.3 其它常用指令 书接上文 Jupyter-Notebook是一个基于 Web 的交互式开发环…

第十四节、受伤、死亡的逻辑和动画

一、受伤的动画效果 1齿轮控制当前动画图层的权重 2、层级 当前动画层为add&#xff0c;所以不会覆盖之前的动画层&#xff0c;而是添加一个动画层 3、受伤闪烁 调用颜色的值&#xff0c;实现受伤闪烁 4、录制动画 点击时间轴&#xff0c;插入关键帧 伤害图层选择add&…

2024华数杯C题解题思路、参考论文已出(无偿分享)~

C题&#xff1a;老外游中国 “数模加油站”团队出品~ 问题1&#xff1a; 解题思路&#xff1a; 1、数据准备&#xff1a; 导入352个城市的csv文件&#xff0c;提取每个城市中的100个景点的信息。 将每个景点的评分数据提取出来&#xff0c;形成一个包含35200个景点评分的列…

centos虚拟机restart网络后隔一会断联

1. 前言 不知道各位有没有遇到过虚拟机网络设置的坑&#xff0c;往往前一段时间用的好好的&#xff0c;突然网络又不行了无法连接外部网络&#xff0c;而且使用 service network restart 一瞬间可以&#xff0c;但是过一会就断连了… 2. 解决方案 根据对虚拟机网络的学习了解…

五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置

项目描述 上位机将截图数据通过 XDMA 写入到 FPGA 侧的 DDR 内存区域 1 中通过 axi_lite 接口给 axi_read_start 信号&#xff0c;通知 AXI_read 模块启动读取数据&#xff0c;然后通过 GTP TX 模块发送出去。经过光纤回环&#xff0c;GTP RX 端接收到数据&#xff0c;送给 AX…

今天的一件小事,亲身感受:付费是提高效率的重要途径

今天需要修改一个单页网站源码&#xff0c;有一个小问题困住我3个小时了。 毕竟我也不是专业的&#xff0c;没有系统学习过这些&#xff0c;搜答案都不知道怎么搜哈哈 吃过午饭&#xff0c;想着不能这么耗下去了&#xff0c;于是及时去了某宝&#xff0c;找到一个修改代码的 …

搭建nexus上传jar包,并结合jenkins运行项目

一、搭建nexus 1、docker拉取镜像 需要将docker原更新一下 https://blog.csdn.net/qx020814/article/details/140908006?spm1001.2014.3001.5502 docker pull sonatype/nexus3 创建nexus挂载文件、增加权限&#xff1a; mkdir docker_nexus3 mkdir docker_nexus3/nexus-data c…

TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急

目录 TreeSize&#xff1a;免费的磁盘清理与管理神器&#xff0c;解决C盘爆满的燃眉之急 一、TreeSize介绍 二、下载安装TreeSize 2.1、下载地址 2.2、下载步骤 ​2.3、安装步骤 三、professional版的TreeSize试用 3.1、分析磁盘空间 3.2、显示拓展名统计信息 3.3、显…

将本地的业务写成成可供RPC远程调用的方法

第一步&#xff1a;首先我们先定义proto文件&#xff0c;这些proto文件将会为远程调用者提供调用的方法&#xff0c;为login方法。 2.重写UserServiceRpc类中的Login方法。 在Login中做的操作主要是&#xff0c;得到requst里面的参数&#xff0c;然后调用本地的Login方法&#…

可解释性终极追问,什么才是第一性解释?20篇CCF-A+ICLR论文给你答案

一、前言 长期以来&#xff0c;我们团队一直在思考可解释性领域的一个终极问题&#xff0c;即什么才是解释性领域的第一性原理&#xff1f;所谓第一性原理&#xff0c;目前没有一个被广泛接受的框架&#xff0c;世上本无路&#xff0c;我们需要逐渐去定义这样一个路。我们需要在…

Linux系统中的高级内核模块调试技术

引言 在Linux系统中进行高级内核模块开发时&#xff0c;调试是不可或缺的重要环节。调试技术能够帮助开发人员发现和解决代码中的错误和问题&#xff0c;提高开发效率和代码质量。本文将深入探讨Linux系统中高级内核模块调试的技术和方法&#xff0c;包括常用的调试工具、调试…

JAVA—面向对象编程高级

学习了一定基础后&#xff0c;开始更加深入的学习面向对象&#xff0c;包含static,final两个关键字&#xff0c;面向对象编程三大特征之继承和多态。以及对于抽象类&#xff0c;内部类&#xff0c;接口&#xff0c;枚举&#xff0c;泛型的学习。 目录 1.static &#xff08;…

cdn 内容分发网络

cdn 内容分发网络 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层…

Milvus与Zilliz Cloud:向量数据库高可用性的双重飞跃

向量数据库高可用性的重要性及其在现代数据分析中的关键作用 在数据爆炸式增长的今天,企业对于高效、准确地处理和分析大规模数据集的需求日益迫切。尤其是在人工智能、机器学习、图像识别、自然语言处理等领域,向量数据库因其对高维数据的高效存储与检索能力,成为了不可或…

【数据结构算法经典题目刨析(c语言)】括号匹配问题(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一、题目描述 二、解题思路 三、代码实现 一、题目描述 二、解题思路 问题要求将三种类型括号匹配&#xff0c;其中包括顺序匹配和数量匹配 使用栈的后进先…

Linux压缩命令:zip命令详解

目录 一、概述 二、术语 三、基本语法 1、语法 2、常用选项 四、选项和示例 1. -r - 递归压缩目录及其子目录。 2. -j - 只加入文件而不保留目录结构。 3. -m - 压缩后从文件系统中删除原文件。 4. -u - 更新已存在的 ZIP 文件中的文件。 5. -q - 静默模式&#xff…

C语言指针(2)

今天我们接着前两天的内容继续讲解 一、数组名的理解 1、&arr[0]与arr 有时候我们需要获取数组首元素&#xff0c;有两种方法可以获取。 使用这两种方法都可以获得数组首元素&arr[0]&#xff0c;arr。 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10};printf(&…

Ubuntu安装nvidia-docker并使用的正确方式

Ubuntu安装docker: ubuntu(24.04)以及WSL2安装docker的详细教程_unbantu安装docker-CSDN博客文章浏览阅读646次,点赞5次,收藏3次。默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo。…

Undefined symbol vApplicationGetTimerTaskMemory (referred from timers.o).

在使用FreeRTOS中的cubemx配置RTC时钟时&#xff0c;配置完毕出现这个问题&#xff0c; Error: L6218E: Undefined symbol vApplicationGetTimerTaskMemory (referred from timers.o). 链接器在timers.o目标文件中发现了一个未定义的符号vApplicationGetTimerTaskMemory。这个…

深度学习复盘与论文复现F

文章目录 1、Environment construction1.1 macos conda1.2 macos PyTorch1.3 iTerm settings1.4 install jupyter 2、beam search2.1 greedy search2.2 exhaustive search2.3 beam search 3、Attention score3.1 Masking softmax operation3.2 Additive attention3.3 Zoom dot …