将 JS ArrayBuffer 或 TypedArray 传递给 Emscripten w/o

Passing a JS ArrayBuffer or TypedArray to Emscripten w/o Copying

我在 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);

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

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

也就是说,当使用 C API.

时,通过 Module._malloc() 分配的缓冲区可以 “通过指针”传递

Embinding 将向 C++ 类型添加额外的复制。

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