我正在使用 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/