fill: Wasm memory Instruction
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2021 browserübergreifend verfügbar.
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