javascript - 使用 Node.js 的 native 抽象时如何管理内存?

标签 javascript c++ node.js memory-management memory-leaks

我正在使用 Node.js 的原生抽象 (NAN) 从 node.js 程序调用 C++ 函数。

一个 C++ 使用 new char[] 分配一个缓冲区并将其返回给我的 node.js 程序。

我的问题是我不知道谁负责释放这段内存。我在我的 C++ 代码中使用 NanReturnValue 来返回指向缓冲区的指针。如果我之后立即删除 [],node.js 代码就会变成垃圾。但是,如果我根本不 delete[] 它,则可能会出现内存泄漏(尽管泄漏可能在其他地方)。文档非常稀疏,并且不清楚谁(无论是 javascript 还是 C++)负责释放此内存。

最佳答案

您需要连接到 v8 中的 GC 以获得对您的 C++ 代码的回调,让您知道没有 JavaScript 对象引用您返回的缓冲区。

在该 C++ 回调中,您可以删除 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);

对于您的缓冲区,可能存在一些差异,但我希望这能让您了解前进的方向。

关于javascript - 使用 Node.js 的 native 抽象时如何管理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317432/

相关文章:

c++ - 在 Windows R 中使用 openmp,rtools 是否支持 openmp?

c++ - libc++ 是否为过多的 basic_string_view 提供散列特化?

javascript - 何时关闭 MongoDB 连接

node.js - amazon s3 deleteObjects nodejs - 无法正常工作

javascript - 如何修复 Node.js HTTPS 服务器 "SSL Error"?

java - 有没有从javascript到Java bean(spring bean)执行RPC的框架?

javascript - 将 javascript 变量分配给 angularjs $scope.options

javascript - Angular 中的 d3.js - 属性 'event' 在类型 'typeof import 上不存在

c++ - 奇怪的模板错误 : error C2783: could not deduce template argument

javascript - 类型错误 : Class extends value undefined is not a constructor or null