优化的 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 中连接或合并 TypedArrays