将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]

Posted

技术标签:

【中文标题】将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]【英文标题】:Passing a c++ double buffer to Node Js (directly) [Node JS : V8 c++ : Nan] 【发布时间】: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 使用它之前将失效的本地数组的残余。 现在我想这是做不到的,因为每个部分都有自己的内存机制。所以我觉得这个问题可以结束了 【参考方案1】:

当你想传递大数据时,你应该使用Buffer类。

在this page,您可以在底部附近获得使用示例。

通过这种方式,您可以将一块内存传回 javascript,而无需进行任何复制。

【讨论】:

以上是关于将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串数组作为缓冲区传递给 C++ 到 C#

C++ 中的高效循环缓冲区,将传递给 C 风格的数组函数参数

如何将双精度向量传递给构造函数,然后在子类中访问其数据(在 C++ 中)?

尝试将自定义 C++ 矩阵传递给 numpy 数组

Node.js:如何将向量传递给函数?

node.js html-pdf 转换问题,文件回来损坏