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 を設定する必要はありません。

shared 省略可

論理値で、このメモリーを共有メモリーにするかどうかを定義します。 true に設定すると、共有メモリーになります。既定値は false です。

Note: 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

関連情報