javascript - 将 JS ArrayBuffer 或 TypedArray 传递给 Emscripten,无需复制

标签 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);

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

最佳答案

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

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

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

更多信息见this emscripten 邮件列表中的线程。

关于javascript - 将 JS ArrayBuffer 或 TypedArray 传递给 Emscripten,无需复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434845/

相关文章:

c++ - 通过 OpenSSL (c++) 以 XML (w3c) 格式保存 RSA 公钥和私钥

C++ 插入对象列表

javascript - 带有缩略图的中心幻灯片无法正常工作 iDangero.us 的 Swiper

C++ 迭代器比索引慢得多?

javascript - JQuery $.ajax() 使用异步将数据获取到变量中

javascript - 如何检查 Firefox 是否使用 asm.js 代码?

javascript - emscripten window.onload 等效

javascript - 使用 emscripten 在 JavaScript 中分配 C 结构体

javascript - 如何让 d3.js 中的光标在我想要的时候改变?

javascript - 如何更改日期范围选择器的日期格式?