大小:Wasm 文本指令
size
内存指令 用于获取内存中当前页数。
该指令将大小(以页为单位)添加到堆栈顶部。目前,每个页大小为 64KiB。
试试看
语法
获取默认内存的大小
wasm
;; Get the number of pages in the default memory
memory.size
;; The number of pages is now added at top of stack
获取指定内存的大小(如果支持多内存)
wasm
;; Size of memory with index 1
memory.size (memory 1)
;; Size of memory named $memory2
memory.size (memory $memory2)
指令和操作码
指令 | 二进制操作码 |
---|---|
memory.size |
0x3f |
示例
获取默认内存的大小
添加到 Wasm 模块的第一个内存是默认内存,索引为 0。我们可以通过调用 memory.size
获取此内存中的页数。
以下代码展示了一个 WAT 文件,它演示了这一点
wasm
(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
)
在上面,我们不需要在 memory.size
指令中指定内存索引,但我们可以使用默认内存的内存索引(0)来进行指定
wasm
memory.size (memory 0)
为了完整性,我们可以使用上面文件的编译版本 size.wasm
,代码类似于以下所示(日志函数被导入到模块中,并由模块调用)
js
start();
async function start() {
const importObject = {
console: {
log(arg) {
console.log(arg);
},
},
};
const result = await WebAssembly.instantiateStreaming(
fetch("size.wasm"),
importObject,
);
}
start();
获取特定内存的大小
当内存被定义在 Wasm 模块中时,它们将按顺序从零开始分配索引号。您可以通过在 memory.size
指令之后指定 memory
指令和所需的索引或名称(如果存在)来获取特定内存的大小。如果您没有指定特定内存,则将使用索引为 0 的默认内存。
以下模块展示了如何通过索引和名称直接引用内存。
wasm
(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)
)
WAT 文件可以使用与第一个示例相同的 JavaScript 代码加载。
规范
规范 |
---|
未知规范 # syntax-instr-memory |
浏览器兼容性
BCD 表格仅在浏览器中加载
注意: Wasm 模块中的内存支持与 WebAssembly.Memory
JavaScript API 相匹配。multiMemory
键指示 size
可用于指定内存的版本。