在Node.js中使用Native Abstractions时,如何管理内存
How do I manage memory when using Native Abstractions for Node.js?
我正在使用Node.js(NAN)的Native Abstractions从Node.js程序中调用C++函数。
一个C++使用new char[]分配一个缓冲区,并将其返回给我的node.js程序。
我的问题是,我不知道谁应该为释放这段记忆负责。我在C++代码中使用NanReturnValue返回一个指向缓冲区的指针。如果我马上删除[],node.js代码就会变成垃圾。但如果我根本不删除它,它可能存在内存泄漏(尽管泄漏可能在其他地方)。文档非常稀疏,并且不清楚谁(无论是javascript还是C++)负责释放这些内存。
您需要挂接v8中的GC,以获得对C++代码的回调,让您知道没有JavaScript对象引用您返回的缓冲区。
在那个C++回调中,您可以delete
ArrayBuffer内存。
我相信你已经看过这些文档,但请注意Nan::FreeCallBack()部分:https://github.com/nodejs/nan/blob/master/doc/buffers.md#api_nan_free_callback
这里有一个快速的例子:
//defined before hand:
static void FreeCallback(char* data, void* message) {
free(message);
}
//some where in a function:
Local<Object> buf_obj = NanNewBufferHandle((char*)zmq_msg_data(message), zmq_msg_size(message), FreeCallback, message);
对于你的缓冲区,可能会有一些差异,但我希望这能让你知道前进的方向。
相关文章:
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何访问声音管理器2创建的声音对象
- JS编译器/包管理器,用于版本控制
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 以角度管理动态URL
- React Redux错误页面管理
- 让Webpack管理Quirky AMD定义的最佳方式
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- JavaScript管理具有重复属性名称的对象属性
- 管理四位数的ID
- 布局中的项目管理
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- jQuery中的状态管理是什么
- CSS更改类样式管理面板
- 如何管理视图的更改
- 如何在词法环境中管理块范围
- 使用2个控制器管理工厂JSON$http数据
- Modx数据包管理器ext-all.js错误
- 从javaspring方法管理http.get响应
- 在React中管理大型状态树