我在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
,但这似乎不起作用
我错过了什么?
答案 0 :(得分:1)
回答自己 就目前而言,没有办法允许emscriptened C / C ++代码访问JS分配的内存缓冲区。
话虽这么说,使用C API时,通过Module._malloc()分配的缓冲区可以“通过指针”传递。
Embinding会在C ++类型中添加额外的复制。
有关详细信息,请参阅emscripten邮件列表中的this主题。