Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
WebAssembly.Memory
DasWebAssembly.Memory Objekt ist ein skalierbarerArrayBuffer oderSharedArrayBuffer, der rohe Bytespeicher enthält, auf den von einerWebAssembly.Instance zugegriffen wird.
Sowohl WebAssembly als auch JavaScript könnenMemory Objekte erstellen.Wenn Sie auf den im JS erstellten Speicher aus WebAssembly zugreifen möchten oder umgekehrt, können Sie den Speicher aus dem Modul nach JavaScript exportieren oder Speicher von JavaScript in das Modul importieren, wenn esinstanziiert wird.
Ursprünglich konnten Sie Speicheroperationen nur auf einem einzelnen Speicher im Wasm-Modul ausführen, daher gab es zwar die Möglichkeit, mehrereMemory Objekte zu erstellen, aber es ergab keinen Sinn, dies zu tun.Neuere Implementierungen erlauben es, dass WebAssemblySpeicheranweisungen auf einen bestimmten Speicher ausgeführt werden.Für weitere Informationen sieheMehrere Speicher im AbschnittVerständnis des WebAssembly-Textformats.
Hinweis:WebAssembly-Speicher ist immer im Little-Endian-Format, unabhängig von der Plattform, auf der es läuft. Daher sollten Sie für die Portabilität Multi-Byte-Werte in JavaScript mitDataView lesen und schreiben.
In diesem Artikel
Konstruktor
WebAssembly.Memory()Erstellt ein neues
MemoryObjekt.
Instanzeigenschaften
Memory.prototype.bufferSchreibgeschütztGibt den im Speicher enthaltenen Puffer zurück.
Instanzmethoden
Memory.prototype.grow()Erhöht die Größe der Speicherinstanz um eine angegebene Anzahl von WebAssembly-Seiten (jede ist 64KiB groß). Trennt den vorherigen
buffer.
Beispiele
>Erstellen eines neuen Memory-Objekts
Es gibt zwei Möglichkeiten, einWebAssembly.Memory Objekt zu erhalten. Der erste Weg ist, es aus JavaScript zu konstruieren. Das folgende Snippet erstellt eine neue WebAssembly Memory-Instanz mit einer anfänglichen Größe von 10 Seiten (640KiB) und einer maximalen Größe von 100 Seiten (6.4MiB). Diebuffer Eigenschaft gibt einenArrayBuffer zurück.
const memory = new WebAssembly.Memory({ initial: 10, maximum: 100,});Das folgende Beispiel (siehememory.html auf GitHub, undlive ansehen) lädt und instanziiert den geladenen "memory.wasm" Bytecode mit derWebAssembly.instantiateStreaming() Funktion unter der Einbeziehung des oben erstellten Speichers. Anschließend speichert es einige Werte in diesem Speicher, exportiert eine Funktion und verwendet die exportierte Funktion, um diese Werte zu summieren. Beachten Sie die Verwendung vonDataView, 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 Möglichkeit, einWebAssembly.Memory Objekt zu erhalten, besteht darin, es von einem WebAssembly-Modul exportieren zu lassen. Dieser Speicher kann in derexports Eigenschaft der WebAssembly-Instanz zugegriffen werden (nachdem der Speicher innerhalb des WebAssembly-Moduls exportiert wurde). Das folgende Beispiel importiert einen aus WebAssembly exportierten Speicher mit dem Namenmemory und druckt dann das erste Element des Speichers aus, interpretiert als einUint32Array.
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
Standardmäßig sind WebAssembly-Speicher nicht geteilt. Sie können einengeteilten Speicher aus JavaScript erstellen, indem Sieshared: true im Initialisierungsobjekt des Konstruktors übergeben:
const memory = new WebAssembly.Memory({ initial: 10, maximum: 100, shared: true,});Diebuffer Eigenschaft dieses Speichers gibt einenSharedArrayBuffer zurück.
Spezifikationen
| Specification |
|---|
| WebAssembly JavaScript Interface> # memories> |
| Unknown specification> |