fill: Wasm memory Instruction
Die memory.fill Speicheranweisung setzt alle Bytes in einem Speicherbereich auf ein angegebenes Byte.
Dies ist analog zu memset in C.
Probieren Sie es aus
(module
(memory $my_mem (export "memory") 1)
(func (export "fill")
i32.const 0 ;; memory offset
i32.const 42 ;; value to fill
i32.const 6 ;; number of bytes to fill
memory.fill $my_mem
)
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}")).then((result) => {
result.instance.exports.fill();
const memBuffer = result.instance.exports.memory.buffer;
const memArray = new Uint8Array(memBuffer, 0, 6);
console.log(memArray[5]);
});
Im obigen Beispiel definieren wir einen exportierten Speicher namens $my_mem mit einer maximalen Größe von einer Seite. Dann fügen wir eine exportierte fill()-Funktion hinzu, die die ersten sechs Bytes von $my_mem mit dem Wert 42 füllt.
Im JavaScript rufen wir die fill()-Funktion auf, um den exportierten Speicher mit Daten zu füllen, bringen den Inhalt des exportierten Speichers in ein Array und protokollieren das sechste Array-Element in der Konsole.
Syntax
memory.fill dest_memory
memory.fill-
Der
memory.fill-Instructionstyp. Muss immer zuerst angegeben werden. dest_memoryOptional-
Der Bezeichner des
memory, den Sie füllen möchten. Dies kann eines der folgenden sein:name-
Ein identifizierender Name für den
memory, der bei der ersten Definition gesetzt wurde. Dieser muss mit einem$-Symbol beginnen, zum Beispiel$my_mem. index-
Die Indexnummer des
memory, zum Beispiel0für den erstenmemoryim Wasm-Modul,1für den zweiten, usw.
Wenn
dest_memoryweggelassen wird, wird standardmäßig0verwendet.
Typ
[dest_offset value length] -> []
dest_offset-
Ein Integer, der den Offset repräsentiert, an dem der Speicher zu füllen beginnt. Dies wird ein
i32oder eini64sein, um demaddress_typezu entsprechen, mit dem dermemorydefiniert wurde. value-
Ein
i32, der den Wert darstellt, mit dem die ausgewählten Bytes gefüllt werden sollen. Dervaluewird auf 8 Bits gekürzt, damit er auf jedes Byte angewendet werden kann. length-
Ein
i32oder eini64, der die Anzahl der Bytes darstellt, die mit demvaluegefüllt werden sollen. Dies wird demaddress_typeentsprechen, mit dem dermemorydefiniert wurde.
Traps
Wenn der angegebene Speicherbereich außerhalb des gültigen Bereichs liegt, schlägt die Anweisung fehl.
Binärcodierung
| Instruction | Binärformat | Beispieltext => Binär |
|---|---|---|
memory.fill |
0xfc 11:u32 x:memidx |
memory.fill 0 => 0xfc 0x0b 0x00 |
Beispiele
>Füllen innerhalb des Standardspeichers (0-Index)
;; Fill region at offset/range in default memory with 255
i32.const 200 ;; The pointer to the region to update
i32.const 255 ;; The value to set each byte to (must be < 256)
i32.const 100 ;; The number of bytes to update
memory.fill ;; Fill default memory
;; Fill default memory using an S-expression
(memory.fill (i32.const 200) (i32.const 255) (i32.const 100))
Füllen innerhalb eines bestimmten Speichers
;; Fill specific memory referenced by its index
i32.const 200 ;; The pointer to the region to update
i32.const 255 ;; The value to set each byte to (must be < 256)
i32.const 100 ;; The number of bytes to update
memory.fill (memory 1) ;; Fill memory with index 1
;; Fill memory referenced by its name
i32.const 200 ;; The pointer to the region to update
i32.const 255 ;; The value to set each byte to (must be < 256)
i32.const 100 ;; The number of bytes to update
memory.fill (memory $memoryName) ;; Fill memory with name "$memoryName"
;; Fill same memory using an S-expression
(memory.fill (memory $memoryName) (i32.const 200) (i32.const 255) (i32.const 100))
Spezifikationen
| Spezifikation |
|---|
| WebAssembly Core Specification> # -hrefsyntax-instr-memorymathsfmemoryfillx> |
Browser-Kompatibilität
Siehe auch
memory-Definition