size: Wasm Text-Instruktion
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die size
Speicher-Instruktion wird verwendet, um die aktuelle Anzahl von Seiten in einem Speicher zu bestimmen.
Die Instruktion fügt die Größe (in Seiten) oben auf den Stack hinzu. Derzeit beträgt jede Seite 64KiB.
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 Standardspeichers 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 (wenn 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 Standardspeichers abrufen
Der erste Speicher, der einem Wasm-Modul hinzugefügt wird, ist der Standardspeicher und hat den Index 0. Wir können die Anzahl der Seiten in diesem Speicher durch den Aufruf von memory.size
erhalten.
Der untenstehende 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 tun können, indem wir den Speicherindex (0) des Standardspeichers verwendet hätten:
memory.size (memory 0)
Der Vollständigkeit halber können wir die kompilierte Version der oben genannten Datei size.wasm
verwenden, mit einem Code ähnlich dem unten gezeigten (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 Speicherelemente in einem Wasm-Modul definiert sind, erhalten sie sequentiell eine Indexnummer ab Null. Sie können die Größe eines bestimmten Speichers abrufen, indem Sie nach der memory.size
-Instruktion die memory
-Instruktion und den gewünschten Index oder Namen (falls vorhanden) angeben. Wenn Sie keinen bestimmten Speicher angeben, wird der Standardspeicher mit Index 0 verwendet.
Das untenstehende Modul zeigt, wie Sie möglicherweise direkt auf einen Speicher durch Index und Name verweisen könnten.
(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 dem gleichen JavaScript-Code wie im ersten Beispiel geladen werden.
Spezifikationen
Specification |
---|
Unknown specification # syntax-instr-memory |
Browser-Kompatibilität
BCD tables only load in the browser
Hinweis:
Die Speicherunterstützung in Wasm-Modulen entspricht der WebAssembly.Memory
JavaScript-API.
Der multiMemory-Schlüssel gibt Versionen an, in denen size
mit einem angegebenen Speicher verwendet werden kann.