将JS ArrayBuffer或TypedArray传递到带有复制的Emscripten

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

本文关键字:复制 Emscripten ArrayBuffer JS TypedArray      更新时间:2023-10-16

我在JavaScript中具有非常大的arraybuffer(或 typedarray ),我想传递到emscripted功能。我想在不产生副本的情况下通过原始字节。

如果我的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(),但这似乎不起作用。
我想念什么?

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

说,通过Module._malloc() 分配的缓冲区可以通过指针传递"。使用C API。

启动会将其他复制添加到C 类型中。

有关更多信息,请参见emscripten邮件列表上的此主题。