Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

WebAssembly.Memory()

L'objet WebAssembly.Memory est un ArrayBuffer ou SharedArrayBuffer redimensionnable qui contient des octets bruts de mémoire accessibles par un objet WebAssembly.Instance.

WebAssembly et JavaScript permettent tous deux de créer des objets Memory. Si vous souhaitez accéder à la mémoire créée en JS depuis WebAssembly, ou inversement, vous pouvez exporter la mémoire du module vers JavaScript ou importer la mémoire de JavaScript vers le module lors de son instanciation.

À l'origine, vous ne pouviez effectuer des opérations de mémoire que sur une seule mémoire dans le module Wasm, donc bien que plusieurs objets Memory puissent être créés, cela n'avait aucun intérêt. Les implémentations plus récentes permettent aux instructions de mémoire de WebAssembly d'opérer sur une mémoire définie. Pour plus d'informations, voir Mémoires multiples dans Comprendre le format texte WebAssembly.

Note : La mémoire WebAssembly est toujours au format petit-boutiste, quel que soit la plateforme sur laquelle elle est exécutée. Par conséquent, pour des raisons de portabilité, vous devez lire et écrire des valeurs multi-octets en JavaScript en utilisant DataView.

Constructeur

WebAssembly.Memory()

Crée un nouvel objet Memory.

Propriétés d'instance

Memory.prototype.buffer Lecture seule

Retourne le tampon contenu dans la mémoire.

Méthodes d'instance

Memory.prototype.grow()

Augmente la taille de l'instance de mémoire d'un nombre défini de pages WebAssembly (chacune de 64 KiB). Détache le buffer précédent.

Exemples

Créer un nouvel objet Memory

Il existe deux façons d'obtenir un objet WebAssembly.Memory. La première consiste à le construire à partir de JavaScript. L'extrait suivant crée une nouvelle instance de mémoire WebAssembly avec une taille initiale de 10 pages (640 KiB) et une taille maximale de 100 pages (6,4 MiB). Sa propriété buffer retourne un ArrayBuffer.

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

L'exemple suivant (voir memory.html (angl.) sur GitHub, et la voir en direct (angl.)) récupère et instancie le code binaire chargé « memory.wasm » en utilisant la fonction WebAssembly.instantiateStreaming(), tout en important la mémoire créée à la ligne ci-dessus. Il stocke ensuite des valeurs dans cette mémoire, exporte une fonction, et utilise la fonction exportée pour additionner ces valeurs. Notez l'utilisation de DataView pour accéder à la mémoire afin d'utiliser toujours le format petit-boutiste.

js
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 est petit boutiste
  }
  const sum = obj.instance.exports.accumulate(0, 10);
  console.log(sum);
});

Une autre façon d'obtenir un objet WebAssembly.Memory est de l'avoir exporté par un module WebAssembly. Cette mémoire peut être accédée dans la propriété exports de l'instance WebAssembly (après que la mémoire ait été exportée dans le module WebAssembly). L'exemple suivant importe une mémoire exportée depuis WebAssembly avec le nom memory, puis affiche le premier élément de la mémoire, interprété comme un Uint32Array.

js
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
  const values = new DataView(obj.instance.exports.memory.buffer);
  console.log(values.getUint32(0, true));
});

Créer une mémoire partagée

Par défaut, les mémoires WebAssembly ne sont pas partagées. Vous pouvez créer une mémoire partagée depuis JavaScript en passant shared: true dans l'objet d'initialisation du constructeur :

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

La propriété buffer de cette mémoire retournera un objet SharedArrayBuffer.

Spécifications

Spécification
WebAssembly JavaScript Interface
# memories
Unknown specification

Compatibilité des navigateurs

webassembly.api.Memory

webassembly.multiMemory

Voir aussi