Thanks to visit codestin.com
Credit goes to developer.mozilla.org

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

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 を返します。

js
var memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });

次の例では (GitHub 上の memory.html および実行例も参照)、 memory.wasm バイトコードを WebAssembly.instantiateStreaming() メソッドを使用して読み込みんでインスタンス化し、その上の行で生成されたメモリーにインポートします。それから、メモリーにいくつかの値を格納し、関数をエクスポートして使用し、いくつかの値を合計します。

js
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 として解釈して表示しています。

js
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
  var i32 = new Uint32Array(obj.instance.exports.memory.buffer);
  console.log(i32[0]);
});

共有メモリーの作成

既定では、 WebAssembly のメモリーは共有されていません。共有メモリーを作成するには、コンストラクター の初期化オブジェクトに shared: true を渡します。

js
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

関連情報