[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/Memory/init [Back]  [Original]

init: Wasm Speicheranweisung - WebAssembly | MDN

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

View in English Always switch to English

init: Wasm Speicheranweisung

Die memory.init Speicheranweisung kopiert manuell die Bytes von einer passiven Daten-Definition in einen Speicher.

In diesem Artikel

Probieren Sie es aus

(module
  (memory (export "memory") 1)
  (data $greeting "Hello World")

  (func (export "init")
    i32.const 0       ;; destination offset in memory
    i32.const 0       ;; offset into the data segment
    i32.const 11      ;; number of bytes to copy
    memory.init $greeting
    data.drop $greeting
  )
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}")).then((result) => {
  result.instance.exports.init();
  const memBuffer = result.instance.exports.memory.buffer;
  const memArray = new Uint8Array(memBuffer, 0, 11);
  console.log(new TextDecoder().decode(memArray));
});

Im obigen Beispiel definieren wir eine Daten-Definition mit dem Bezeichner $greeting, die den String "Hello World" enthlt. In der Funktion init() wird das Daten-Segment mit der Anweisung memory.init in den Speicher geschrieben; anschlieend lschen wir das Daten-Segment mit data.drop, da es nicht mehr bentigt wird.

Im JavaScript rufen wir die exportierte init()-Funktion auf, um die Datendefinition in den Speicher zu schreiben, dekodieren dann den exportierten Speicherpuffer und geben das Ergebnis in der Konsole aus.

Syntax

memory.init memory_identifier data_identifier
memory.init

Der Anweisungstyp memory.init. Muss immer zuerst enthalten sein.

memory_identifier Optional

Der Bezeichner fr den Speicher, in den Sie die Daten kopieren mchten. Dies kann einer der folgenden sein:

name

Ein Bezeichnername gesetzt fr den Speicher, als er erstmals definiert wurde. Dieser muss mit einem $-Symbol beginnen, zum Beispiel $my_mem.

index

Die Indexnummer des Speichers, zum Beispiel 0 fr den ersten Speicher im Wasm-Modul, 1 fr den zweiten usw.

Wird memory_identifier weggelassen, wird es standardmig auf 0 gesetzt.

data_identifier

Der Bezeichner fr die Daten-Definition, von der Sie die Daten kopieren mchten. Dies kann einer der folgenden sein:

name

Ein Bezeichnername gesetzt fr die Daten, als sie erstmals definiert wurden. Dieser muss mit einem $-Symbol beginnen, zum Beispiel $my_data.

index

Die Indexnummer der Daten, zum Beispiel 0 fr die ersten Daten im Wasm-Modul, 1 fr die zweiten usw.

Typ

[dest_offset source_offset length] -> []
dest_offset

Ein Integer, der die Verschiebung darstellt, an der die kopierten Daten im Zielspeicher zu schreiben beginnen sollen. Dies wird ein i32 oder ein i64 sein, um dem address_type zu entsprechen, mit dem der Speicher definiert wurde.

source_offset

Ein i32, das die Byte-Verschiebung im Daten-Segment darstellt, ab der Daten gelesen werden sollen.

length

Ein i32, der die Anzahl der zu kopierenden Bytes darstellt.

Traps

Die memory.init-Anweisung erzeugt einen Fehler, wenn:

  • Die dest_offset plus der length die Gre des Speichers berschreitet.
  • Die source_offset plus der length die Gre des Daten-Segments berschreitet.
  • Die data.drop-Anweisung zuvor auf das im data_identifier referenzierte Daten-Segment aufgerufen wurde.

Binrcodierung

Anweisung Binrformat Beispieltext => binr
memory.init 0xfc 8:u32 x:memidx x:dataidx memory.init 0 0 => 0xfc 0x08 0x00 0x00

Spezifikationen

Spezifikation
WebAssembly Core Specification
# -hrefsyntax-instr-memorymathsfmemoryinitxy

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page