1

我正在使用 AssemblyScript 来生成 WebAssembly,但我不确定为什么“优化的”WebAssembly 模块如此之大。我将基础教程中的简单加法函数修改为乘法函数,如下所示:

export function mult(a: i32, b: i32): i32 {
  return a * b;
}

我可以找到在 optimize.wat 文件中定义的这个函数:

 (func $assembly/index/mult (; 26 ;) 
   (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
  local.get $0
  local.get $1
  i32.mul
 )

但是,模块中有大量额外的代码。模块总大小超过1800行。似乎有很多我不需要的额外东西。示例文件夹中的 WAT 文件都很好而且很小。Mandlebrot 示例只有 200 行 WAT,而 Game of Life 示例只有 400 行。为什么简单的乘法会产生 1800 行?是否有我缺少的优化设置?

谢谢

4

1 回答 1

2

自 0.7 版以来,AssemblyScript 默认使用完整的运行时,其中包括 ARC 操作、GC 和基本内存操作,这些操作也始终导出到主机并且无法消除。如果您不处理主机上的内存和/或传递和分配托管对象,您可以切换到--runtime noneor --runtime half

查看 docs.assemblyscript.org 上的所有运行时变体

于 2019-07-13T23:43:53.383 回答