我在 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/