NAPI创建arraybuffer内存释放问题咨询
ArkTS可以通过NAPI来调用C/C++实现的方法。
上层ArkTS定义返回的是Uint8Array类型,例如:export const getArray: () => Uint8Array;
底层NAPI在实现时,C++关键代码参考如下:
void* buffer = NULL; /* 分配数组的指针地址 /
int buffer_len = 20; / 此处20只是举例,实际并非固定,可能是从入参数据获取的长度 */
napi_value array_buffer = NULL;
napi_value result = NULL;
napi_create_arraybuffer(env, buffer_len, (void *)&buffer, &array_buffer);
/ 获取数据实现,例如:if(data_len < buffer_len) memcpy(buffer, data, data_len); */
napi_create_typedarray(env, napi_uint8_array, data_len, array_buffer, 0, &result);
return result;
问题是,由于buffer是NAPI动态分配的内存,需不需要释放内存?通过什么方式/方法来释放?或者有没有其他API替代上述napi_create_arraybuffer的实现,比如napi_create_external_arraybuffer?如果可以用napi_create_external_arraybuffer的方式,其中参数napi_finalize是在什么情况下回调的,实际调试过程中发现没有进这个回调。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS Napi Arraybuffer无法创建
104浏览 • 1回复 待解决
native层创建的pixelmap,arraybuffer等内存数据,传给ts层使用,最后是ts层的系统自动释放回收内存吗?
491浏览 • 1回复 待解决
HarmonyOS napi_value returen后释放问题
64浏览 • 1回复 待解决
HarmonyOS napi_create_external_arraybuffer接口问题
88浏览 • 1回复 待解决
napi_get_arraybuffer_info 和 napi_create_arraybuffer 的使用
2236浏览 • 1回复 待解决
HarmonyOS 使用napi_create_buffer_copy创建大内存失败
183浏览 • 1回复 待解决
Native如何通过napi获取ArrayBuffer?
3838浏览 • 1回复 待解决
HarmonyOS开发过程应用内存问题咨询
446浏览 • 1回复 待解决
HarmonyOS napi共享内存指导
86浏览 • 1回复 待解决
HarmonyOS 应用内存资源占用过大时,系统是否会自动释放内存?
525浏览 • 1回复 待解决
napi返回ArrayBuffer有长度但是内容都是0
1219浏览 • 1回复 待解决
HarmonyOS napi 接口线程安全咨询
441浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何正确释放JSVM环境以避免内存泄漏?
186浏览 • 1回复 待解决
#鸿蒙通关秘籍#系统内存不足时如何利用AbilityStage释放资源
222浏览 • 1回复 待解决
napi_create_external_arraybuffer的finalize_cb没有调用
72浏览 • 1回复 待解决
HarmonyOS eventHub创建方式咨询
226浏览 • 1回复 待解决
NAPI 通过 napi_wrap 创建的对象似乎没有被销毁
1969浏览 • 1回复 待解决
HarmonyOS AVCapture录音得到数据Arraybuffer,传递到napi层,如何在Napi层正确的获取并使用?
269浏览 • 1回复 待解决
HarmonyOS 在应用内删除沙箱路径下的内容后,内存没有立即释放
143浏览 • 1回复 待解决
HarmonyOS Napi的问题
87浏览 • 1回复 待解决
NAPI开发问题
98浏览 • 1回复 待解决
HarmonyOS 如何获取内存快照,分析内存泄漏问题?
121浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在UIAbility中处理资源的创建和释放
193浏览 • 2回复 待解决
mapkitxiang 问题咨询
449浏览 • 1回复 待解决
napi_create_arraybuffer、napi_get_arraybuffer_info使用规则如下:
说明:
napi_create_arraybuffer接口定义:napi_create_arraybuffer(napi_env env, size_t byte_length, void** data,napi_value* result)
napi_get_arraybuffer_info接口定义:napi_get_arraybuffer_info(napi_env env, napi_value arraybuffer, void** data, size_t* byte_length)
data获取的是ArrayBuffer的Buffer头指针,开发者只可以在范围内读写该Buffer区域,不可以进行释放操作。该段内存由引擎内部的ArrayBuffer Allocator管理,随JS对象ArrayBuffer的生命周期释放。
如下delete不可使用,否则,会存在双重释放:
参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/napi-guidelines-V5#其它