| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/Memory/init | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Die memory.init Speicheranweisung kopiert manuell die Bytes von einer passiven Daten-Definition in einen Speicher.
(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.
memory.init memory_identifier data_identifier
memory.initDer Anweisungstyp memory.init. Muss immer zuerst enthalten sein.
memory_identifier OptionalDer Bezeichner fr den Speicher, in den Sie die Daten kopieren mchten. Dies kann einer der folgenden sein:
nameEin Bezeichnername gesetzt fr den Speicher, als er erstmals definiert wurde. Dieser muss mit einem $-Symbol beginnen, zum Beispiel $my_mem.
indexDie 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_identifierDer Bezeichner fr die Daten-Definition, von der Sie die Daten kopieren mchten. Dies kann einer der folgenden sein:
nameEin Bezeichnername gesetzt fr die Daten, als sie erstmals definiert wurden. Dieser muss mit einem $-Symbol beginnen, zum Beispiel $my_data.
indexDie Indexnummer der Daten, zum Beispiel 0 fr die ersten Daten im Wasm-Modul, 1 fr die zweiten usw.
[dest_offset source_offset length] -> []
dest_offsetEin 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_offsetEin i32, das die Byte-Verschiebung im Daten-Segment darstellt, ab der Daten gelesen werden sollen.
lengthEin i32, der die Anzahl der zu kopierenden Bytes darstellt.
Die memory.init-Anweisung erzeugt einen Fehler, wenn:
dest_offset plus der length die Gre des Speichers berschreitet.source_offset plus der length die Gre des Daten-Segments berschreitet.data.drop-Anweisung zuvor auf das im data_identifier referenzierte Daten-Segment aufgerufen wurde.| Anweisung | Binrformat | Beispieltext => binr |
|---|---|---|
memory.init |
0xfc 8:u32 x:memidx x:dataidx |
memory.init 0 0 => 0xfc 0x08 0x00 0x00 |
| Spezifikation |
|---|
| WebAssembly Core Specification # -hrefsyntax-instr-memorymathsfmemoryinitxy |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |