Baseline Widely available
Die grow()
Prototyp-Methode des WebAssembly.Memory
Objekts erhöht die GröÃe der Speicherinstanz um eine angegebene Anzahl von WebAssembly-Seiten.
delta
Die Anzahl an WebAssembly-Seiten, um die Sie den Speicher erweitern möchten (jede einzelne ist 64KiB groÃ).
Die vorherige GröÃe des Speichers, angegeben in Einheiten von WebAssembly-Seiten.
AusnahmenRangeError
: Wenn die aktuelle GröÃe, addiert mit delta
, die maximale GröÃenkapazität der Speicherinstanz überschreitet.Das folgende Beispiel erstellt eine neue WebAssembly Speicherinstanz mit einer AnfangsgröÃe von 1 Seite (64KiB) und einer maximalen GröÃe von 10 Seiten (640KiB).
const memory = new WebAssembly.Memory({
initial: 1,
maximum: 10,
});
Wir können die Instanz dann um eine Seite wie folgt vergröÃern:
const bytesPerPage = 64 * 1024;
console.log(memory.buffer.byteLength / bytesPerPage); // "1"
console.log(memory.grow(1)); // "1"
console.log(memory.buffer.byteLength / bytesPerPage); // "2"
Beachten Sie, dass der Rückgabewert von grow()
hier die vorherige Anzahl an WebAssembly-Seiten ist.
Jeder Aufruf von grow
trennt alle Referenzen zum alten buffer
, sogar bei grow(0)
! Eine Trennung bedeutet, dass die byteLength
des ArrayBuffer
null wird und es keine Bytes mehr gibt, die in JavaScript zugänglich sind. Der Zugriff auf die buffer
-Eigenschaft nach dem Aufruf von grow
liefert einen ArrayBuffer
mit der korrekten Länge.
const memory = new WebAssembly.Memory({
initial: 1,
});
const oldMemoryView = new Uint8Array(memory.buffer);
memory.grow(1);
// the array is empty!
console.log(oldMemoryView); // Uint8Array []
const memory = new WebAssembly.Memory({
initial: 1,
});
memory.grow(1);
const currentMemoryView = new Uint8Array(memory.buffer);
// the array is full of zeros
console.log(currentMemoryView); // Uint8Array(131072) [ 0, 0, 0, ... ]
// 131072 = 64KiB * 2
Für eine geteilte Memory
-Instanz wird der ursprüngliche buffer
(welcher in einem solchen Fall ein SharedArrayBuffer
wäre) nicht getrennt, sondern seine Länge wird nicht aktualisiert. Der Zugriff auf die buffer
-Eigenschaft nach der VergröÃerung liefert einen gröÃeren SharedArrayBuffer
, der auf einen gröÃeren Speicherbereich zugreifen kann als der buffer
von vor der VergröÃerung der Memory
. Jeder SharedArrayBuffer
der buffer
-Eigenschaft wird sich alle auf den Anfang desselben Speicheradressbereichs beziehen und somit dieselben Daten manipulieren.
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