Nodejs 编写 c++插件,调用第三方 dll 时申请的内存应该如何释放呢?

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs 编写 c++插件,调用第三方 dll 时申请的内存应该如何释放呢?
第三方的 dll 提供了 AddRef 和 Release 用于管理引用计数。

3 回复

爹爹 你是用 ffi 调用还是 napi 调用 dll ?


应该是谁申请谁释放

在Node.js中编写C++插件并调用第三方DLL时,管理内存是一个关键问题。特别是当DLL函数申请内存并返回给Node.js插件时,确保正确释放这些内存以防止内存泄漏至关重要。

以下是一个基本框架,展示如何在Node.js的C++插件中管理从DLL申请的内存,并在适当的时候释放它。

首先,确保你的C++插件可以调用DLL函数。假设DLL函数GetMemory返回一个void*指针,指向分配的内存,你需要在使用完这块内存后释放它。

#include <node.h>
#include <node_buffer.h>
#include <windows.h> // 包含DLL函数所需的头文件

// 假设这是从DLL导入的函数
extern "C" __declspec(dllimport) void* GetMemory(size_t size);
extern "C" __declspec(dllimport) void FreeMemory(void* ptr);

void FreeAllocatedMemory(char* memory, const FunctionCallbackInfo<Value>& args) {
    // 假设memory是从DLL获得的
    FreeMemory(reinterpret_cast<void*>(memory));
}

// 省略其他Node.js插件初始化代码...

// 在适当的地方调用GetMemory,并在不再需要时调用FreeAllocatedMemory

在Node.js插件中,你可以使用FreeAllocatedMemory函数来释放从DLL获得的内存。注意,你需要确保DLL提供了FreeMemory这样的函数来释放其分配的内存,或者你知道如何正确释放它(例如,使用free如果DLL使用malloc)。

务必在Node.js插件的析构函数或适当的回调中释放所有申请的内存,以确保资源得到正确管理。

回到顶部