WebAssembly.Memory()
WebAssembly.Memory ãªãã¸ã§ã¯ãã¯ãµã¤ãºå¤æ´å¯è½ãª ArrayBuffer ã¾ã㯠SharedArrayBuffer ã§ããã WebAssembly Instance ããã¢ã¯ã»ã¹ããçã®ãã¤ãåã®ã¡ã¢ãªã¼ãæã¡ã¾ãã
JavaScript ã¾ã㯠WebAssembly ã³ã¼ãããçæãããã¡ã¢ãªã¼ã¯ JavaScript 㨠WebAssembly ã®ã©ã¡ããããã¢ã¯ã»ã¹ã夿´ãå¯è½ã«ãªãã¾ãã
ã³ã³ã¹ãã©ã¯ã¿ã¼
WebAssembly.Memory()-
æ°ãã
Memoryãªãã¸ã§ã¯ããçæãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
Memory.prototype.buffer-
ã¡ã¢ãªã¼ã«æ ¼ç´ããã¦ãããããã¡ã¼ãè¿ãã¢ã¯ã»ãµã¼ããããã£ã§ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
Memory.prototype.grow()-
æå®ãã WebAssembly ãã¼ã¸ (64KB ã§ 1 åä½) ã®æ°ã§ã¡ã¢ãªã¼ã®ã¤ã³ã¹ã¿ã³ã¹ã®ãµã¤ãºãå¢ããã¾ãã
ä¾
>æ°ãã Memory ãªãã¸ã§ã¯ãã®çæ
WebAssembly.Memory ãªãã¸ã§ã¯ããåå¾ããæ¹æ³ã¯ 2 ã¤ããã¾ãã 1 ã¤ç®ã¯ JavaScript ããçæããæ¹æ³ã§ãã以ä¸ã®ä¾ã§ã¯ãåæãµã¤ãºã 10 ãã¼ã¸ (640KiB) ãæå¤§ãµã¤ãºã 100 ãã¼ã¸ (6.4MiB) ã§æ°ãã WebAssembly Memory ã¤ã³ã¹ã¿ã³ã¹ãçæãã¦ãã¾ãããã® buffer ããããã£ã¯ ArrayBuffer ãè¿ãã¾ãã
var memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });
次ã®ä¾ã§ã¯ (GitHub ä¸ã® memory.html ããã³å®è¡ä¾ãåç
§)ã memory.wasm ãã¤ãã³ã¼ãã WebAssembly.instantiateStreaming() ã¡ã½ããã使ç¨ãã¦èªã¿è¾¼ã¿ãã§ã¤ã³ã¹ã¿ã³ã¹åãããã®ä¸ã®è¡ã§çæãããã¡ã¢ãªã¼ã«ã¤ã³ãã¼ããã¾ãããããããã¡ã¢ãªã¼ã«ããã¤ãã®å¤ãæ ¼ç´ãã颿°ãã¨ã¯ã¹ãã¼ããã¦ä½¿ç¨ããããã¤ãã®å¤ãåè¨ãã¾ãã
WebAssembly.instantiateStreaming(fetch("memory.wasm"), {
js: { mem: memory },
}).then((obj) => {
var i32 = new Uint32Array(memory.buffer);
for (var i = 0; i < 10; i++) {
i32[i] = i;
}
var sum = obj.instance.exports.accumulate(0, 10);
console.log(sum);
});
WebAssembly.Memory ãªãã¸ã§ã¯ããåå¾ãã 2 ã¤ç®ã®æ¹æ³ã¯ã WebAssembly ã¢ã¸ã¥ã¼ã«ã«ãã£ã¦ã¨ã¯ã¹ãã¼ãããããã¨ã§ãããã®ã¡ã¢ãªã¼ã¯ WebAssembly ã¤ã³ã¹ã¿ã³ã¹ã® exports ããããã£ã§ (ã¡ã¢ãªã¼ã WebAssembly ã¢ã¸ã¥ã¼ã«å
ã§ã¨ã¯ã¹ãã¼ããããå¾ã«) ã¢ã¯ã»ã¹ã§ãã¾ããæ¬¡ã®ã¹ããããã¯ã WebAssembly ããã¨ã¯ã¹ãã¼ããããã¡ã¢ãªã¼ã memoryã¨ããååã§ã¤ã³ãã¼ãããã¡ã¢ãªã¼ã®æåã®è¦ç´ ã Uint32Array ã¨ãã¦è§£éãã¦è¡¨ç¤ºãã¦ãã¾ãã
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
var i32 = new Uint32Array(obj.instance.exports.memory.buffer);
console.log(i32[0]);
});
å ±æã¡ã¢ãªã¼ã®ä½æ
æ¢å®ã§ã¯ã WebAssembly ã®ã¡ã¢ãªã¼ã¯å
±æããã¦ãã¾ãããå
±æã¡ã¢ãªã¼ã使ããã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ã¼
ã®åæåãªãã¸ã§ã¯ãã« shared: true ãæ¸¡ãã¾ãã
let memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
shared: true,
});
ãã®ã¡ã¢ãªã¼ã® buffer ããããã£ã¯ SharedArrayBuffer ãè¿ãã¾ãã
仿§æ¸
| Specification |
|---|
| WebAssembly JavaScript Interface > # memories > |
| Unknown specification > |
ãã©ã¦ã¶ã¼ã®äºææ§
>webassembly.api.Memory
webassembly.multiMemory
é¢é£æ å ±
- WebAssembly æ¦è¦ãã¼ã¸
- WebAssembly ã®æ¦å¿µ
- WebAssembly JavaScript API ã®ä½¿ç¨