WebAssembly.Memory() コンストラクター
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年10月以降、すべてのブラウザーで利用可能です。
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 を返します。
仕様書
| 仕様書 |
|---|
| WebAssembly JavaScript Interface> # dom-memory-memory> |