Javascript 为什么只有WebAssembly.Memory.buffer的getter?什么';如果缓冲区是SharedArrayBuffer,那么底层机制是什么?
因为我们可以通过Javascript 为什么只有WebAssembly.Memory.buffer的getter?什么';如果缓冲区是SharedArrayBuffer,那么底层机制是什么?,javascript,webassembly,sharedarraybuffer,Javascript,Webassembly,Sharedarraybuffer,因为我们可以通过WebAssembly.memory将WebAssembly内存设置为共享内存: wasmMemory = new WebAssembly.Memory({ "initial": NUMBER, "maximum": NUMBER, "shared": true }); WebAssembly.Memory.buffer只有一个getter,因此我无法执行以下操作: buff = new Sh
WebAssembly.memory
将WebAssembly内存设置为共享内存:
wasmMemory = new WebAssembly.Memory({
"initial": NUMBER,
"maximum": NUMBER,
"shared": true
});
WebAssembly.Memory.buffer
只有一个getter,因此我无法执行以下操作:
buff = new SharedArrayBuffer(NUMBER);
wasmMemory.buffer = buff;
第一个问题:
它设计成这样有什么原因吗。我查过了答案,但没有找到答案
可能是normalSharedArrayBuffer
和wasm的SharedArrayBuffer
的底层实现,尽管它们的实例是相同的
或者在这个设计中还有其他的结果吗
第二个问题:
有没有什么神奇的方法可以将已有的SharedArrayBuffer
放入WebAssembly.Memory
我之所以想这样做,是因为我有一个新类,它是从原来的SharedArrayBuffer
扩展而来的,我也想在wasm中使用它。我也找不到任何官方解释,但是如果我不得不猜测,这是因为每次内存增长时,您的自定义缓冲区都会自动替换为默认缓冲区。我也找不到任何官方解释,但如果我不得不猜测,这是因为每次内存增长时,您的自定义缓冲区都会自动替换为默认缓冲区。我查阅了V8的实现。WASM的底层缓冲区似乎与JS的相同。WASM objects.cc
:handlebuffer=(shared==SharedFlag::kShared)?隔离->工厂()->NewJSSharedArrayBuffer(std::move(backing_store)):隔离->工厂()->NewJSArrayBuffer(std::move(backing_store))代码>顺便说一句。我认为你的猜测听起来很合理。我还看到最近的一则公告,由于解决了幽灵攻击,他们带回了SharedArrayBuffers,并说WebAssembly buffer现在将是SharedArrayBuffer。这是正确的答案,应该被接受。缓冲区由WebAssembly.Memory实现管理,在增长时可以交换,这就是为什么您不能提供自己的缓冲区。我查阅了V8的实现。WASM的底层缓冲区似乎与JS的相同。WASM objects.cc
:handlebuffer=(shared==SharedFlag::kShared)?隔离->工厂()->NewJSSharedArrayBuffer(std::move(backing_store)):隔离->工厂()->NewJSArrayBuffer(std::move(backing_store))代码>顺便说一句。我认为你的猜测听起来很合理。我还看到最近的一则公告,由于解决了幽灵攻击,他们带回了SharedArrayBuffers,并说WebAssembly buffer现在将是SharedArrayBuffer。这是正确的答案,应该被接受。缓冲区由WebAssembly.Memory实现管理,可以在增长时交换,这就是为什么您不能提供自己的缓冲区。