如何理解 WebAssembly 函数体中的 "smallest index"?

How to understand the "smallest index" in a WebAssembly function body?

如何理解我用红色矩形区分的句子?

通过相同的 index space 访问局部变量和函数参数。索引 space 是一个抽象实体 - 实现者可以自由放置他们认为合适的参数和局部变量,但参数和局部变量应该通过相同的索引访问。

接受参数 $px 和 $py 的此 add2 函数将访问索引 0 处的 $px 和索引 1 处的 $py:

(func $add2 (param $px i32) (param $py i32) 
 get_local 0
 get_local 1
 i32.add)

这个只包含一个参数的 add_local 函数将在索引 0 处有 $px,在索引 1 处有局部 $z。

   (func $add_local (param $px i32) (local $z i32)
     get_local 0
     get_local 1
     i32.add)

所以函数的索引 space 由

组成
  • [0] = 参数 0
  • [1] = 参数 1
  • ...
  • [N] = 参数 N
  • [N+1] = local0
  • [N+2] = local1
  • ...
  • [N+M] = 本地 M