HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
View in English Always switch to English
Das WebAssembly.Memory Objekt ist ein skalierbarer ArrayBuffer oder SharedArrayBuffer, der rohe Bytespeicher enthält, auf den von einer WebAssembly.Instance zugegriffen wird.
WebAssembly.Memory
ArrayBuffer
SharedArrayBuffer
WebAssembly.Instance
Sowohl WebAssembly als auch JavaScript können Memory 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 es instanziiert wird.
Memory
Ursprünglich konnten Sie Speicheroperationen nur auf einem einzelnen Speicher im Wasm-Modul ausführen, daher gab es zwar die Möglichkeit, mehrere Memory Objekte zu erstellen, aber es ergab keinen Sinn, dies zu tun. Neuere Implementierungen erlauben es, dass WebAssembly Speicheranweisungen auf einen bestimmten Speicher ausgeführt werden. Für weitere Informationen siehe Mehrere Speicher im Abschnitt Verstä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 mit DataView lesen und schreiben.
DataView
WebAssembly.Memory()
Erstellt ein neues Memory Objekt.
Memory.prototype.buffer
Gibt den im Speicher enthaltenen Puffer zurück.
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.
buffer
Es gibt zwei Möglichkeiten, ein WebAssembly.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). Die buffer Eigenschaft gibt einen ArrayBuffer zurück.
const memory = new WebAssembly.Memory({ initial: 10, maximum: 100, });
Das folgende Beispiel (siehe memory.html auf GitHub, und live ansehen) lädt und instanziiert den geladenen "memory.wasm" Bytecode mit der WebAssembly.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 von DataView, um auf den Speicher zuzugreifen, sodass immer das Little-Endian-Format verwendet wird.
WebAssembly.instantiateStreaming()
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, ein WebAssembly.Memory Objekt zu erhalten, besteht darin, es von einem WebAssembly-Modul exportieren zu lassen. Dieser Speicher kann in der exports 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 Namen memory und druckt dann das erste Element des Speichers aus, interpretiert als ein Uint32Array.
exports
memory
Uint32Array
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => { const values = new DataView(obj.instance.exports.memory.buffer); console.log(values.getUint32(0, true)); });
Standardmäßig sind WebAssembly-Speicher nicht geteilt. Sie können einen geteilten Speicher aus JavaScript erstellen, indem Sie shared: true im Initialisierungsobjekt des Konstruktors übergeben:
shared: true
const memory = new WebAssembly.Memory({ initial: 10, maximum: 100, shared: true, });
Die buffer Eigenschaft dieses Speichers gibt einen SharedArrayBuffer zurück.
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.