gpt4 book ai didi

flash - 为什么 Flash ActionScript3 编译器会生成不必要的代码?

转载 作者:行者123 更新时间:2023-12-04 11:57:59 25 4
gpt4 key购买 nike

我最近为 AVM2/AS3 制作了一个反编译器,我注意到 Flash 编译器往往会发出很多不必要的代码。例如,对于某个应用程序,我删除了大约 10% 的代码,而对功能没有任何损害。它只是一个没有被条件操作码或异常处理块引用的死代码。

另外,看看这个片段:

    ...
313 setproperty y
315 getlocal 12
317 returnvalue
318 jump L9


L3:
322 getlocal 8
324 returnvalue

L9:
325 jump L10 ; L10 (opcode #331) does not ever exist.
; Technically, it is a jump beyond
; the end of function. This is invalid code!

L2:
329 pushnull
330 returnvalue

嗯,当然这是无效的代码,它也是无效的,因此不会造成任何不利影响(代码库膨胀除外)。但是为什么它会发出那个代码呢?为什么验证者接受这一点?

最佳答案

ASC 或 compc 不优化。这很不幸,但理论上是 JIT 完成了所有优化工作。你可以想出更糟糕的例子,比如添加两个常量。所以答案是:对不起,它只是没有优化。 future 可能会有更好的编译器。现在,您必须依靠 AS3 JIT 在运行时进行优化工作(它在这方面做得不错!)或使用不同的编译器。

关于flash - 为什么 Flash ActionScript3 编译器会生成不必要的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com