| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/Memory | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
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.
WebAssembly.Memory()Erstellt ein neues Memory-Objekt.
Memory.prototype.buffer SchreibgeschtztGibt den im Speicher enthaltenen Puffer zurck.
Memory.prototype.grow()Erhht die Gre der Speicherinstanz um eine angegebene Anzahl von WebAssembly-Seiten (jede ist 64KiB gro). Trennt den vorherigen buffer ab.
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.
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.
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.
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
const values = new DataView(obj.instance.exports.memory.buffer);
console.log(values.getUint32(0, true));
});
Standardmig sind WebAssembly-Speicher nicht geteilt. Sie knnen einen geteilten Speicher von JavaScript erstellen, indem Sie shared: true in das Initialisierungsobjekt des Konstruktors bergeben:
const memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
shared: true,
});
Die buffer-Eigenschaft dieses Speichers gibt einen SharedArrayBuffer zurck.
Das folgende Snippet erstellt eine neue WebAssembly-Speicherinstanz mit einem 64-Bit-Adressentyp.
Die initial- und maximum-Werte mssen BigInt-Werte sein:
const memory = new WebAssembly.Memory({
address: "i64",
initial: 1n,
maximum: 10n,
});
| Spezifikation |
|---|
| WebAssembly JavaScript Interface # memories |
| Unknown specification |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |