WebAssembly.Memory() コンストラクター
WebAssembly.Memory()
コンストラクターは新しい Memory
オブジェクトを生成します。これは buffer
プロパティがサイズ変更可能な ArrayBuffer
または SharedArrayBuffer
であり、 WebAssembly の Instance
からアクセスする生のバイト列のメモリーであるものです。
JavaScript または WebAssembly コードから生成されたメモリーは JavaScript と WebAssembly のどちらからもアクセス、変更が可能になります。
構文
new WebAssembly.Memory(memoryDescriptor);
引数
- memoryDescriptor
-
以下のメンバーを含むことができるオブジェクトです。
- initial
-
WebAssembly メモリーの初期サイズで、単位は WebAssembly ページ数です。
- maximum 省略可
-
WebAssembly メモリーを拡張できる最大サイズで、単位は WebAssembly ページ数です。存在する場合、
maximum
引数はエンジンがメモリーを予約するヒントとして使用されます。ただし、エンジンはこの予約リクエストを無視したり固定したりすることがあります。一般的に、ほとんどの WebAssembly モジュールではmaximum
を設定する必要はありません。 -
論理値で、このメモリーを共有メモリーにするかどうかを定義します。
true
に設定すると、共有メモリーになります。既定値はfalse
です。
メモ: WebAssembly ページは 65,536 バイト、すなわち 64KiB の固定長です。
例外
memoryDescriptor
がオブジェクトでない場合は、TypeError
が発生します。maximum
が設定されており、かつinitial
よりも小さい場合は、RangeError
が発生します。
例
新しい Memory インスタンスの作成
WebAssembly.Memory
オブジェクトを取得する方法は 2 つあります。 1 つ目は JavaScript から構築する方法です。次の例では、新しい WebAssembly Memory インスタンスを初期サイズが 10 ページ (640KiB) 、最大サイズが 100 ページ (6.4MiB) で生成しています。この buffer
プロパティは ArrayBuffer
を返します。
var memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });
2 つ目は WebAssembly モジュールからエクスポートされた WebAssembly.Memory
オブジェクトを使用する方法です。次の例では (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 のメモリーは共有されていません。共有メモリーを作成するには、コンストラクター
の初期化オブジェクトに shared: true
を渡してください。
let memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
shared: true,
});
このメモリーの buffer
プロパティは SharedArrayBuffer
を返します。
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-memory-memory |
ブラウザーの互換性
BCD tables only load in the browser