WASM Bindgen处理&mut [u8]时会进行零次还是两次内存拷贝?
WASM Bindgen处理&mut [u8]参数的内存拷贝情况
WASM Bindgen在处理该函数的&mut [u8]参数时是零拷贝。
具体说明:
- 当Rust函数用
#[wasm_bindgen]标记并接收&mut [u8]类型参数时,WASM Bindgen生成的JS绑定会让Rust代码直接操作WASM的线性内存区域。 - 若JS端传递的是映射自WASM线性内存的
Uint8Array(比如通过WASM Bindgen提供的API创建的数组),Rust的&mut [u8]会直接指向这块内存,全程没有内存拷贝操作。 - 函数内部的
input_output.iter_mut().for_each(|x| *x += 1)是直接在原内存地址上修改数据,不会产生额外的复制开销。
补充:如果JS端传递的是普通的非WASM内存数组,WASM Bindgen会先将数据拷贝到WASM线性内存中,但这是因为数据源不在WASM内存空间导致的,并非&mut [u8]参数处理机制本身的强制拷贝。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

