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无法创建 
950浏览  • 1回复 待解决
native层创建的pixelmap,arraybuffer等内存数据,传给ts层使用,最后是ts层的系统自动释放回收内存吗? 
1609浏览  • 1回复 待解决
HarmonyOS napi_value returen后释放问题 
636浏览  • 1回复 待解决
HarmonyOS 如何确定内存中创建的ArkTS对象已被释放了 
885浏览  • 1回复 待解决
HarmonyOS napi_create_external_arraybuffer接口问题 
1215浏览  • 1回复 待解决
napi_get_arraybuffer_info 和 napi_create_arraybuffer 的使用 
4014浏览  • 1回复 待解决
HarmonyOS 使用napi_create_buffer_copy创建大内存失败 
1322浏览  • 1回复 待解决
Native如何通过napi获取ArrayBuffer? 
5562浏览  • 1回复 待解决
HarmonyOS开发过程应用内存问题咨询 
1430浏览  • 1回复 待解决
HarmonyOS napi共享内存指导 
1040浏览  • 1回复 待解决
HarmonyOS  应用内存资源占用过大时,系统是否会自动释放内存? 
1641浏览  • 1回复 待解决
napi返回ArrayBuffer有长度但是内容都是0 
2130浏览  • 1回复 待解决
HarmonyOS napi 接口线程安全咨询 
1447浏览  • 1回复 待解决
开发者手动释放ArrayBuffer内存导致double free的原因是什么?如何通过工具(如HWAsan)检测并避免此类问题 
484浏览  • 0回复 待解决
#鸿蒙通关秘籍#如何正确释放JSVM环境以避免内存泄漏? 
1341浏览  • 1回复 待解决
napi_create_external_arraybuffer的finalize_cb没有调用 
1477浏览  • 1回复 待解决
#鸿蒙通关秘籍#系统内存不足时如何利用AbilityStage释放资源 
1803浏览  • 1回复 待解决
HarmonyOS eventHub创建方式咨询 
833浏览  • 1回复 待解决
HarmonyOS AVCapture录音得到数据Arraybuffer,传递到napi层,如何在Napi层正确的获取并使用? 
1148浏览  • 1回复 待解决
NAPI 通过 napi_wrap 创建的对象似乎没有被销毁 
3387浏览  • 1回复 待解决
HarmonyOS NAPI调用三方C库咨询 
1114浏览  • 1回复 待解决
HarmonyOS 在应用内删除沙箱路径下的内容后,内存没有立即释放 
1087浏览  • 1回复 待解决
mapkitxiang 问题咨询 
1496浏览  • 1回复 待解决
HarmonyOS Napi的问题 
972浏览  • 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#其它