WebAssembly.Memory
WebAssembly.Memory 物件是一個可調整大小的 ArrayBuffer 或 SharedArrayBuffer,它儲存由 WebAssembly.Instance 訪問的原始位元組記憶體。
WebAssembly 和 JavaScript 都可以建立 Memory 物件。如果您想從 WebAssembly 訪問在 JS 中建立的記憶體,反之亦然,您可以在模組例項化時將記憶體從模組匯出到 JavaScript,或者從 JavaScript 匯入記憶體到模組。 例項化。
最初,您只能對 Wasm 模組中的單個記憶體執行記憶體操作,因此雖然可以建立多個 Memory 物件,但這樣做沒有任何意義。更近期的實現允許 WebAssembly 記憶體指令 對指定的記憶體進行操作。有關更多資訊,請參閱瞭解 WebAssembly 文字格式中的 多個記憶體。
注意:WebAssembly 記憶體始終為小端格式,與執行它的平臺無關。因此,為了可移植性,您應該使用 DataView 在 JavaScript 中讀取和寫入多位元組值。
建構函式
WebAssembly.Memory()-
建立一個新的
Memory物件。
例項屬性
Memory.prototype.buffer只讀-
返回記憶體中包含的緩衝區。
例項方法
Memory.prototype.grow()-
將記憶體例項的大小增加指定數量的 WebAssembly 頁面(每個頁面大小為 64KiB)。分離之前的
buffer。
示例
建立新的 Memory 物件
有兩種方法可以獲取 WebAssembly.Memory 物件。第一種方法是從 JavaScript 構造它。以下程式碼段建立了一個新的 WebAssembly Memory 例項,初始大小為 10 頁(640KiB),最大大小為 100 頁(6.4MiB)。它的 buffer 屬性將返回一個 ArrayBuffer。
const memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
});
以下示例(請參閱 GitHub 上的 memory.html,以及 即時檢視)使用 WebAssembly.instantiateStreaming() 函式獲取並例項化已載入的“memory.wasm”位元組碼,同時匯入上面一行中建立的記憶體。然後,它將一些值儲存在該記憶體中,匯出一個函式,並使用匯出的函式對這些值求和。請注意 DataView 的使用,以便我們始終使用小端格式來訪問記憶體。
const memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
});
WebAssembly.instantiateStreaming(fetch("memory.wasm"), {
js: { mem: memory },
}).then((obj) => {
const summands = new DataView(memory.buffer);
for (let i = 0; i < 10; i++) {
summands.setUint32(i * 4, i, true); // WebAssembly is little endian
}
const sum = obj.instance.exports.accumulate(0, 10);
console.log(sum);
});
獲取 WebAssembly.Memory 物件的另一種方法是讓它由 WebAssembly 模組匯出。可以在 WebAssembly 例項的 exports 屬性中訪問此記憶體(在 WebAssembly 模組中匯出記憶體之後)。以下示例匯入從 WebAssembly 匯出的名為 memory 的記憶體,然後打印出記憶體的第一個元素,解釋為 Uint32Array。
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
const values = new DataView(obj.instance.exports.memory.buffer);
console.log(values.getUint32(0, true));
});
建立共享記憶體
預設情況下,WebAssembly 記憶體是非共享的。您可以透過在建構函式的初始化物件中傳遞 shared: true 來從 JavaScript 建立 共享記憶體
const memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
shared: true,
});
此記憶體的 buffer 屬性將返回一個 SharedArrayBuffer。
規範
| 規範 |
|---|
| WebAssembly JavaScript 介面 # 記憶 |
| 未知規範 |
瀏覽器相容性
webassembly.api.Memory
BCD 表僅在瀏覽器中載入
webassembly.multiMemory
BCD 表僅在瀏覽器中載入