我有一个使用 Nan 库的 c++ 节点添加。我有一个需要返回缓冲区的函数。最简单的版本如下(根据注释编辑代码):
NAN_METHOD(Test) {
char * retVal = (char*)malloc(100 * sizeof(char));
info.GetReturnValue().Set(Nan::NewBuffer(retVal, 100 *sizeof(char)).ToLocalChecked());
}
联合只是用作重新解释字节的简单方法。根据文档, Nan::NewBuffer 承担了内存的所有权,因此无需手动释放内存。但是,当我运行使用此功能的节点代码时,我的内存猛增,即使我通过强制垃圾收集器运行global.gc();
节点代码产生错误也非常简单:
const addon = require("addon");
for (let i = 0; i < 100000000; i++) {
if(i % (1000000) === 0){
console.log(i);
try {
global.gc();
} catch (e) {
console.log("error garbage collecting");
process.exit();
}
}
const buf = addon.Test();
}
任何帮助,将不胜感激。