[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/Memory [Back]  [Original]

WebAssembly.Memory - WebAssembly | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

WebAssembly.Memory

Das WebAssembly.Memory-Objekt ist ein skalierbarer ArrayBuffer oder SharedArrayBuffer, der rohe Bytes von Speicher enthlt, auf die ein WebAssembly.Instance zugreift.

Sowohl WebAssembly als auch JavaScript knnen Memory-Objekte erstellen. Wenn Sie auf den in JS erstellten Speicher von WebAssembly zugreifen mchten, oder umgekehrt, knnen Sie den Speicher aus dem Modul nach JavaScript exportieren oder Speicher aus JavaScript importieren, wenn das Modul instanziiert wird.

Ursprnglich konnte man Speicheroperationen nur auf einem einzigen Speicher im Wasm-Modul ausfhren, sodass es zwar mglich war, mehrere Memory-Objekte zu erstellen, dies aber keinen Sinn machte. Neuere Implementierungen ermglichen es WebAssembly Speicheranweisungen auf einen bestimmten Speicher zuzugreifen. Fr weitere Informationen siehe Mehrere Speicher im Verstndnis des WebAssembly-Textformats.

Hinweis: WebAssembly-Speicher ist immer im Little-Endian-Format, unabhngig von der Plattform, auf der es ausgefhrt wird. Aus Portabilittsgrnden sollten Sie daher mehrbyteige Werte in JavaScript mit DataView lesen und schreiben.

In diesem Artikel

Konstruktor

WebAssembly.Memory()

Erstellt ein neues Memory-Objekt.

Instanz-Eigenschaften

Memory.prototype.buffer Schreibgeschtzt

Gibt den im Speicher enthaltenen Puffer zurck.

Instanz-Methoden

Memory.prototype.grow()

Erhht die Gre der Speicherinstanz um eine angegebene Anzahl von WebAssembly-Seiten (jede ist 64KiB gro). Trennt den vorherigen buffer ab.

Beispiele

Erstellen eines neuen Memory-Objekts

Es gibt zwei Mglichkeiten, ein WebAssembly.Memory-Objekt zu erhalten. Die erste Mglichkeit besteht darin, es ber JavaScript zu konstruieren. Das folgende Snippet erstellt eine neue WebAssembly-Speicherinstanz mit einer anfnglichen Gre von 10 Seiten (640KiB) und einer maximalen Gre von 100 Seiten (6.4MiB). Ihre buffer-Eigenschaft gibt einen ArrayBuffer zurck.

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

Das folgende Beispiel (siehe memory.html auf GitHub, und live ansehen) ldt und instanziiert den geladenen "memory.wasm"-Bytecode mit der Funktion WebAssembly.instantiateStreaming(), whrend der oben erstellte Speicher importiert wird. Es speichert dann einige Werte in diesem Speicher, exportiert eine Funktion und verwendet die exportierte Funktion, um diese Werte zu summieren. Beachten Sie die Verwendung von DataView, um auf den Speicher zuzugreifen, sodass immer das Little-Endian-Format verwendet wird.

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

WebAssembly.instantiateStreaming(fetch("memory.wasm"), {
  js: { mem: memory },
}).then((obj) => {
  const summands = new DataView(memory.buffer);
  for (let i = 0; i < 10; i++) {
    summands.setUint32(i * 4, i, true); // WebAssembly is little endian
  }
  const sum = obj.instance.exports.accumulate(0, 10);
  console.log(sum);
});

Eine andere Mglichkeit, ein WebAssembly.Memory-Objekt zu erhalten, besteht darin, es von einem WebAssembly-Modul exportieren zu lassen. Dieser Speicher kann ber die exports-Eigenschaft der WebAssembly-Instanz zugnglich gemacht werden (nachdem der Speicher innerhalb des WebAssembly-Moduls exportiert wurde). Das folgende Beispiel importiert einen Speicher, der aus WebAssembly mit dem Namen memory exportiert wurde, und gibt dann das erste Element des Speichers aus, interpretiert als ein Uint32Array.

js
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
  const values = new DataView(obj.instance.exports.memory.buffer);
  console.log(values.getUint32(0, true));
});

Erstellen eines geteilten Speichers

Standardmig sind WebAssembly-Speicher nicht geteilt. Sie knnen einen geteilten Speicher von JavaScript erstellen, indem Sie shared: true in das Initialisierungsobjekt des Konstruktors bergeben:

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

Die buffer-Eigenschaft dieses Speichers gibt einen SharedArrayBuffer zurck.

Verwendung einer 64-Bit-Adresse

Das folgende Snippet erstellt eine neue WebAssembly-Speicherinstanz mit einem 64-Bit-Adressentyp. Die initial- und maximum-Werte mssen BigInt-Werte sein:

js
const memory = new WebAssembly.Memory({
  address: "i64",
  initial: 1n,
  maximum: 10n,
});

Spezifikationen

Spezifikation
WebAssembly JavaScript Interface
# memories
Unknown specification

Browser-Kompatibilitt

webassembly.api.Memory

webassembly.multiMemory

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page