これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

WebAssembly.Memory() コンストラクタは  Memory オブジェクトを生成します。これは、WebAssembly Instance からアクセスされるメモリで使用される生のバイト列を持つリサイズ可能な ArrayBuffer です。

JavaScript か WebAssembly コードから生成されたメモリは JavaScript と WebAssembly のどちらからもアクセス、変更が可能になります。

構文

var myMemory = new WebAssembly.Memory(memoryDescriptor);

パラメータ

memoryDescriptor
以下のメンバーを含むことができるオブジェクト:
initial
WebAssembly Memory の初期サイズを WebAssembly ページ単位で設定します。
maximum Optional
WebAssembly Memory の拡張できる最大サイズを WebAssembly ページ単位で設定します。 存在する場合、 maximum パラメータはメモリーを前面に確保するためのエンジンのヒントとして機能します。一般的に、ほとんどの WebAssembly モジュールは maximum を設定する必要はありません。

: WebAssembly ページは65536バイト、すなわち64KiBのサイズを1単位とします。

例外

  • もし memoryDescriptor がオブジェクト型でない場合、TypeError がスローされます。
  • もし maximum が定義されていて、 initial よりも小さい場合、 RangeError がスローされます。

Memory インスタンス

全ての Memory インスタンスは Memory() コンストラクタの プロトタイプオブジェクト を継承します。これは全ての Memory インスタンスに影響するように変更可能です。

インスタンスプロパティ

Memory.prototype.constructor
このオブジェクトのインスタンスを生成した関数を返します。デフォルトでは WebAssembly.Memory() コンストラクタです。
Memory.prototype.buffer
メモリーに格納されているバッファを返すアクセサプロパティ。

インスタンスメソッド

Memory.prototype.grow()
指定した WebAssembly ページの数 (64KBを1単位とする) で Memory インスタンスのサイズを増やします。

WebAssembly.Memory オブジェクトを取得する方法は2つあります。1つ目は JavaScript から生成する方法です。以下の例では、初期サイズが10ページ (640KiB) 、最大サイズが100ページ (6.4MiB) で新しい WebAssembly Memory インスタンスを生成しています。

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

2つ目は WebAssembly モジュールからエクスポートされた WebAssembly.Memory オブジェクトを使用する方法です。以下の例 (Github memory.html と 動作例 を参照) では fetchAndInstantiate() ユーティリティ関数を使用して memory.wasm バイトコードをフェッチし、インスタンス化しています。次にモジュールからメモリーをエクスポートして、何個かの値を格納し、エクスポートされた関数を使用して数を合計しています。

fetchAndInstantiate('memory.wasm').then(function(instance) {
  var i32 = new Uint32Array(instance.exports.mem.buffer);
  for (var i = 0; i < 10; i++) {
    i32[i] = i;
  }
  var sum = instance.exports.accumulate(0, 10);
  console.log(sum);
});

仕様

仕様 策定状況 コメント
WebAssembly JavaScript Interface
Memory の定義
草案 初回ドラフト定義。

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0
bufferChrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0
growChrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0
prototypeChrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: ukyo
最終更新者: ukyo,