在Node.js中使用Native Abstractions时,如何管理内存

How do I manage memory when using Native Abstractions for Node.js?

本文关键字:何管理 管理 内存 js Node Abstractions Native      更新时间:2023-09-26

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

对于你的缓冲区,可能会有一些差异,但我希望这能让你知道前进的方向。