优化的 AssemblyScript 仍然是 4K,用于简单的乘法

Posted

技术标签:

【中文标题】优化的 AssemblyScript 仍然是 4K,用于简单的乘法【英文标题】:Optimized AssemblyScript still 4K for simple multiply 【发布时间】:2019-11-23 03:40:23 【问题描述】:

我正在使用 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 行?是否有我缺少的优化设置?

谢谢

【问题讨论】:

【参考方案1】:

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

See all runtime variants on docs.assemblyscript.org

【讨论】:

使用 --runtime none 效果很好。优化后的 wat 文件减少到 16 行,这正是我想要的。谢谢!

以上是关于优化的 AssemblyScript 仍然是 4K,用于简单的乘法的主要内容,如果未能解决你的问题,请参考以下文章

分配 65536 个元素的数组后,AssemblyScript / WebAssembly 分配失败

assemblyScript

AssemblyScript:动态本地数组大小

在 AssemblyScript 中连接或合并 TypedArrays

是否可以从 AssemblyScript 导入 .wasm 文件?

AssemblyScript 是不是支持函数数组?