我想知道asm.js规范中是否有任何“设计限制”会阻止任何编译器直接从它生成本机汇编代码。
现在firefox的速度似乎是本机代码的一半,但我想知道它为什么不以原生速度运行。在我看来,asm.js很像很多..
答案 0 :(得分:2)
此限制目前使用Typed Array
类型的Javascript作为内存(堆栈和堆)。这是因为其他脚本与您的asm.js生成的Javascript交互,并且需要共享的“内存”空间。
此外,我猜Typed Array
被实现为实际堆内存,这将比使用堆栈慢。
答案 1 :(得分:1)
因为Firefox的编译器不像C编译器那样进行任何有益于asm.js代码的优化。 在Windows上,也因为已编译的代码必须执行数组访问的边界检查(在其他操作系统OdinMonkey上,Firefox的asm.js编译器使用内存保护)。