pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/Memory/grow

556c3a1-e57c-4bdf-a490-390a1aebf6dd/airgap.js" >

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WebAssembly.Memory.prototype.grow()

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2017 browserübergreifend verfügbar.

Die grow() Prototyp-Methode des WebAssembly.Memory Objekts erhöht die Größe der Speicherinstanz um eine angegebene Anzahl von WebAssembly-Seiten.

Syntax

js
grow(delta)

Parameter

delta

Die Anzahl der WebAssembly-Seiten, um die Sie den Speicher erweitern möchten (jede hat eine Größe von 64KiB). Für Speicher mit einem Adresstyp von "i64" muss dies ein BigInt-Wert sein.

Rückgabewert

Die vorherige Größe des Speichers, in Einheiten von WebAssembly-Seiten. Für Speicher mit einem Adresstyp von "i64" ist dies ein BigInt-Wert.

Ausnahmen

  • RangeError: Wenn die aktuelle Größe zuzüglich delta die maximale Kapazität der Speicherinstanz überschreitet.

Beispiele

Verwendung von grow

Das folgende Beispiel erstellt eine neue WebAssembly-Speicherinstanz mit einer anfänglichen Größe von 1 Seite (64KiB) und einer maximalen Größe von 10 Seiten (640KiB).

js
const memory = new WebAssembly.Memory({
  initial: 1,
  maximum: 10,
});

Wir können die Instanz dann um eine Seite wie folgt erweitern:

js
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 der WebAssembly-Seiten ist.

Erweitern eines 64-Bit-Speichers

Für Speicher mit einem Adresstyp von "i64" verwenden Sie einen BigInt-Wert für grow():

js
const memory = new WebAssembly.Memory({
  address: "i64",
  initial: 1n,
  maximum: 10n,
});

console.log(memory.grow(1n)); // 1n

Abtrennen beim Erweitern

Jeder Aufruf von grow trennt alle Verweise auf den alten buffer ab, selbst bei grow(0)! Das Abtrennen bedeutet, dass die byteLength des ArrayBuffer zu null wird und keine Bytes mehr für JavaScript zugänglich sind. Der Zugriff auf die buffer-Eigenschaft nach dem Aufruf von grow ergibt einen ArrayBuffer mit der korrekten Länge.

js
const memory = new WebAssembly.Memory({
  initial: 1,
});
const oldMemoryView = new Uint8Array(memory.buffer);
memory.grow(1);
// the array is empty!
console.log(oldMemoryView); // Uint8Array []
js
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

Bei einer geteilten Memory-Instanz wird der ursprüngliche buffer (in einem solchen Fall ein SharedArrayBuffer) nicht abgetrennt, sondern seine Länge wird nicht aktualisiert. Der Zugriff auf die buffer-Eigenschaft nach dem Erweitern ergibt einen größeren SharedArrayBuffer, der möglicherweise einen größeren Speicherbereich als der Puffer vor dem Erweitern des Memory zugänglich macht. Jeder SharedArrayBuffer von der buffer-Eigenschaft wird auf denselben Speicheradressbereich verweisen und somit dieselben Daten manipulieren.

Spezifikationen

Spezifikation
WebAssembly JavaScript Interface
# dom-memory-grow

Browser-Kompatibilität

Siehe auch

pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy