为什么只有WebAssembly.Memory.buffer的吸气剂?如果缓冲区是SharedArrayBuffer,则潜在的机制是什么?

问题描述

我们可以通过WebAssembly.Memory将WebAssembly内存设置为共享内存:

wasmMemory = new WebAssembly.Memory({
    "initial": NUMBER,"maximum": NUMBER,"shared": true
});

WebAssembly.Memory.buffer只有吸气剂,因此我不能执行以下操作:

buff =  new SharedArrayBuffer(NUMBER);
wasmMemory.buffer = buff;

一个问题

它有这样的设计原因吗?我检查了SPEC,但没有找到答案。

也许 normal SharedArrayBuffer和wasm的SharedArrayBuffer的基础实现是相同的,尽管它们的instanceof是相同的?

这个设计还有其他结果吗?

第二个问题

SharedArrayBuffer中是否存在任何神奇的方法来将WebAssembly.Memory放入其中?

我想这样做是因为我有一个新的类,它从原始的SharedArrayBuffer扩展了,我也想在wasm中使用它。

解决方法

我也没有找到任何官方的解释,但是如果我不得不猜测,那是因为每当内存增长时,您的自定义缓冲区就会被默认缓冲区自动替换。