Baseline Widely available
Der WebAssembly.Memory()
Konstruktor erstellt ein neues Memory
Objekt, dessen buffer
Eigenschaft ein veränderbares ArrayBuffer
oder SharedArrayBuffer
ist, das die rohen Bytes des Speichers hält, auf den von einer WebAssembly.Instance
zugegriffen wird.
Ein von JavaScript oder im WebAssembly-Code erstelltes Speicherobjekt wird sowohl von JavaScript als auch von WebAssembly zugänglich und veränderbar sein, vorausgesetzt, dass der Code das Objekt erstellt hat oder es ihm übergeben wurde.
Sowohl WebAssembly als auch JavaScript können Memory
Objekte erstellen. Wenn Sie auf den in JS erstellten Speicher von Wasm aus oder umgekehrt zugreifen möchten, können Sie eine Referenz auf den Speicher von einer Seite zur anderen übergeben.
new WebAssembly.Memory(memoryDescriptor)
Parameter
memoryDescriptor
Ein Objekt, das die folgenden Mitglieder enthalten kann:
initial
Die anfängliche GröÃe des WebAssembly-Speichers, gemessen in Einheiten von WebAssembly-Seiten.
maximum
Optional
Die maximale GröÃe, auf die der WebAssembly-Speicher wachsen darf, gemessen in Einheiten von WebAssembly-Seiten. Wenn vorhanden, wirkt der maximum
Parameter als Hinweis an die Engine, im Voraus Speicher zu reservieren. Die Engine kann jedoch diese Reservierungsfrage ignorieren oder beschränken. Nicht-geteilte WebAssembly-Speicher müssen keine maximum
-GröÃe festlegen, aber geteilte Speicher schon.
Ein boolescher Wert, der definiert, ob der Speicher ein geteilter Speicher ist oder nicht. Wenn auf true
gesetzt, ist es ein geteilter Speicher. Die Standardeinstellung ist false
.
Hinweis: Eine WebAssembly-Seite hat eine konstante GröÃe von 65.536 Bytes, also 64KiB.
AusnahmenTypeError
Wird ausgelöst, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
memoryDescriptor
ist kein Objekt.initial
ist nicht angegeben.shared
ist vorhanden und true
, aber maximum
ist nicht angegeben.RangeError
Wird ausgelöst, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
maximum
ist angegeben und kleiner als initial
.initial
überschreitet 65.536 (2^16). 2^16 Seiten entsprechen 2^16 * 64KiB = 4GiB Bytes, was der maximale Bereich ist, den ein Wasm-Modul adressieren kann, da Wasm derzeit nur 32-Bit-Adressierung zulässt.Es gibt zwei Möglichkeiten, ein WebAssembly.Memory
Objekt zu erhalten: Es aus JavaScript zu konstruieren oder es von einem WebAssembly-Modul exportieren zu lassen.
Das folgende Beispiel (siehe memory.html auf GitHub und sehen Sie es sich live an) 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). Das Beispiel lädt und instanziiert das geladene memory.wasm-Bytecode mit der Funktion WebAssembly.instantiateStreaming()
, während es den im obigen Zeilen erstellten Speicher importiert. Es speichert dann einige Werte in diesem Speicher, exportiert eine Funktion und verwendet die exportierte Funktion, um diese Werte zu summieren. Die buffer
Eigenschaft des Memory
Objekts gibt einen ArrayBuffer
zurück.
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);
});
Erstellen eines geteilten Speichers
StandardmäÃig sind WebAssembly-Speicher nicht geteilt. Sie können ein geteilter Speicher aus JavaScript erstellen, indem Sie shared: true
im Initialisierungsobjekt des Konstruktors übergeben:
const memory = new WebAssembly.Memory({
initial: 10,
maximum: 100,
shared: true,
});
Die buffer
Eigenschaft dieses Speichers gibt einen SharedArrayBuffer
zurück.
Das shared
Attribut ist nur in dem Threading-Vorschlag für WebAssembly dokumentiert und nicht Teil der offiziellen Spezifikationen.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4