size: Wasm-Text-Instruktion
Die memory.size Speicher-Instruktion wird verwendet, um die aktuelle Anzahl von Seiten in einem Speicher zu erhalten.
Die Instruktion fügt die Größe (in Seiten) oben auf den Stapel hinzu. Derzeit ist jede Seite 64KiB groß.
Probieren Sie es aus
(module
(import "console" "log" (func $log (param i32)))
(memory 2)
(func $main
memory.size ;; get the memory size
call $log ;; log the result
)
(start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });
Syntax
Größe des Standard-Speichers abrufen
;; Get the number of pages in the default memory
memory.size
;; The number of pages is now added at top of stack
Größe eines angegebenen Speichers abrufen (falls Multi-Memory unterstützt wird)
;; Size of memory with index 1
memory.size (memory 1)
;; Size of memory named $memory2
memory.size (memory $memory2)
Instruktionen und Opcodes
| Instruktion | Binärer Opcode |
|---|---|
memory.size |
0x3f |
Beispiele
>Größe des Standard-Speichers abrufen
Der erste Speicher, der zu einem Wasm-Modul hinzugefügt wird, ist der Standard-Speicher und hat den Index 0. Wir können die Anzahl der Seiten in diesem Speicher abrufen, indem wir memory.size aufrufen.
Der folgende Code zeigt eine WAT-Datei, die dies demonstriert:
(module
(import "console" "log" (func $log (param i32)))
(memory 1 2) ;; default memory with one page and max of 2 pages
(func $main
;; get size
memory.size
call $log ;; log the result (1)
;; grow default memory by 1 page
i32.const 1
memory.grow
;;get size again
memory.size
call $log ;; log the result (2)
)
(start $main) ;; call immediately on loading
)
Oben mussten wir den Speicherindex in der memory.size-Instruktion nicht angeben, aber wir hätten dies mit dem Speicherindex (0) des Standardspeichers tun können:
memory.size (memory 0)
Der Vollständigkeit halber können wir die kompilierte Version der obigen Datei size.wasm mit einem ähnlichen Code wie unten gezeigt verwenden (die Log-Funktion wird in das Modul importiert und vom Modul aufgerufen):
start();
async function start() {
const importObject = {
console: {
log(arg) {
console.log(arg);
},
},
};
const result = await WebAssembly.instantiateStreaming(
fetch("size.wasm"),
importObject,
);
}
start();
Größe eines bestimmten Speichers abrufen
Da Speicher in einem Wasm-Modul definiert sind, wird ihnen nacheinander eine Indexnummer ab null zugewiesen. Sie können die Größe eines bestimmten Speichers abrufen, indem Sie die memory-Instruktion und den gewünschten Index oder Namen (falls vorhanden) nach der memory.size-Instruktion angeben. Wenn Sie keinen bestimmten Speicher angeben, wird der Standardspeicher mit Index 0 verwendet.
Das folgende Modul zeigt, wie Sie möglicherweise einen Speicher direkt nach Index und nach Namen referenzieren.
(module
(import "console" "log" (func $log (param i32)))
(memory 1 2) ;; Default memory with one page and max of 2 pages
(memory $memory1 2 4) ;; Memory with index 1, initial 2 page, max 4 pages
(func $main
;; Get size for memory by index
memory.size (memory 1)
call $log ;; log the result (2)
;; Get size for memory by memory name
memory.size (memory $memory1)
call $log ;; log the result (2)
)
(start $main)
)
Die WAT-Dateien könnten mit demselben JavaScript-Code wie im ersten Beispiel geladen werden.
Spezifikationen
| Specification |
|---|
| Unknown specification> # syntax-instr-memory> |
Browser-Kompatibilität
>webassembly.api.Memory
webassembly.multiMemory
Hinweis:
Die multiMemory-Kompatibilitätsübersicht zeigt Versionen an, in denen size mit einem angegebenen Speicher verwendet werden kann.