将JS ArrayBuffer或TypedArray传递给没有复制的Emscripten

时间:2017-02-24 09:18:49

标签: javascript c++ emscripten arraybuffer typedarray

我在JavaScript中有一个非常大的ArrayBuffer(或 TypedArray ),我希望将其传递给emscriptened函数。我想传递原始字节而不会产生副本。

如果我的C / C ++函数采用std::string,如下所示:

void processBuffer(std::string const& buffer)

我可以获取数据,但是IIUC,转换为std::string将产生缓冲区的副本。

有没有办法在没有副本的情况下传递原始缓冲区? 我的访问权限是严格的只读。

我试过了:

void processBuffer(const char* str, size_t size);

allow_raw_pointers()中设置EMSCRIPTEN_BINDINGS,但这似乎不起作用 我错过了什么?

1 个答案:

答案 0 :(得分:1)

回答自己 就目前而言,没有办法允许emscriptened C / C ++代码访问JS分配的内存缓冲区。

话虽这么说,使用C API时,通过Module._malloc()分配的缓冲区可以“通过指针”传递

Embinding会在C ++类型中添加额外的复制。

有关详细信息,请参阅emscripten邮件列表中的this主题。