为了账号安全,请及时绑定邮箱和手机立即绑定

如何将自定义内存对象传递给 WebAssembly?

如何将自定义内存对象传递给 WebAssembly?

米脂 2023-05-19 15:01:07
为什么我的自定义内存对象被忽略了?let memory = new WebAssembly.Memory({ initial: 16, maximum: 16, shared: true });console.log(memory.buffer); // logs: SharedArrayBuffer(1048576) as expectedWebAssembly.instantiateStreaming(fetch('../out/main.wasm'), {    env: { memory }}).then(results => {      console.log(results.instance.exports.memory.buffer);    // logs: ArrayBuffer(131072) - both size and shared parameter is being ignored  });这是一个小提琴https://webassembly.studio/?f=t4fgszgzy9背景:我有一些大的 (64MB) Uint32Array,我想将一些处理委托给 C/C++,而不是每次都复制整个数组,因为在循环中复制数据的开销会破坏此优化的目的。为什么我要 SharedArrayBuffer?我也在 WebWorkers 中使用这些数据,我发现它比传输对象更优雅。
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

大概你已经构建了一个 wasm 模块来导出它的内存而不是导入?在这种情况下,您传递的环境中的内存将被忽略。

如果是这种情况,您可以使用 wasm-objdump 查看。

您使用什么工具来构建模块。如果您使用 wasm-ld 链接,--import-memory如果您想要导入内存,则可以传递给链接器。


查看完整回答
反对 回复 2023-05-19
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信