gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:55:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com