我看过一些关于此的博客文章,并与我的队友进行了一两次讨论,但我想看看堆栈溢出社区的想法。
那么,为什么Adobe Alchemy Tool创建的 Flash 字节码运行速度比 flex 编译器快得多?
此外,flex 编译器何时能够获得类似的性能提升?
是否需要程序员专门使用特殊数组或类似的东西才能获得相同的性能?
我看过一些关于此的博客文章,并与我的队友进行了一两次讨论,但我想看看堆栈溢出社区的想法。
那么,为什么Adobe Alchemy Tool创建的 Flash 字节码运行速度比 flex 编译器快得多?
此外,flex 编译器何时能够获得类似的性能提升?
是否需要程序员专门使用特殊数组或类似的东西才能获得相同的性能?
Alchemy 是ActionScript中LLVM的一个实现。简单地说,它是一个使用 ByteArray 作为内存存储的虚拟机。
Alchemy 编译的 C 代码可以直接访问“内存”(通过 Flash 10 中引入的一些操作码),允许它在闲暇时将内存分块(包括指向对象的指针)。这会导致一些(但绝不是全部)代码运行得更快。某些类型的代码实际上会在 Alchemy 中运行得更慢,因为它是运行在 AVM(另一个 VM)之上的 VM。
此外,Alchemy 没有对 ActionScript 类的本机访问权限,必须通过互操作类访问它们。
alchemy 工具创建的代码使用 Flash 播放器中的指令,而这些指令对常规编译器不可用(据说这些指令是专门针对炼金术公开的)。
希望常规编译器最终是否会获得类似的收益。编译器创建了不合标准的代码已经被证明了几次,并且有几个项目可以优化生成的代码。这些可能会让 Adobe 感到羞耻,无法改进。
很可能,不,程序员不需要做任何特别的事情来获得这些性能提升(尽管查看优化博客,以特定方式编写循环意味着可以更好地优化它们)。