【发布时间】:2015-07-09 16:38:57
【问题描述】:
我正在尝试将确定的双精度数组从 c++ 传递回 Node JS。我现在这样做的方式有效,但它会扼杀性能。因为我需要将双缓冲区转换为 v8 数组。有没有办法直接将双打传递给节点 JS 而无需转换?这是我希望避免使用的伪转换代码:
NAN_METHOD(getDoubles) {
NanScope();
.... calculate double array named: double *VALS;
.... collected elsewhere in my source. Then:
int len=6;
Local<Array> ARRAY = NanNew<Array>(len);
Local<Object> PARAMS = NanNew<Object>();
for (i=0; i<len; i++) {
ARRAY->Set(i, NanNew<Number>(VALS[i]));
}
PARAMS->Set(NanNew<String>("values"), ARRAY);
NanReturnValue(PARAMS);
}
从节点 js,我得到这样的双打:
var addon = require("mycpp_addon");
var result = addon.getDoubles();
console.log(result.values);
【问题讨论】:
-
请注意,如果该双精度数组是本地的,则当函数返回时,该数组将变为无效。因此,将指针传递给局部变量将不起作用,除非数组以某种方式动态分配并且在函数返回时不会被释放。我不知道
node.js,但这可能就是您发布的示例以这种方式执行此操作的原因——它确保没有机会保留在node.js使用它之前将失效的本地数组的残余。 -
现在我想这是做不到的,因为每个部分都有自己的内存机制。所以我觉得这个问题可以结束了
标签: c++ node.js pointers v8 node.js-addon