加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Flash ActionScript3编译器会发出不必要的代码?

发布时间:2020-12-15 07:31:53 所属栏目:百科 来源:网络整理
导读:我最近为AVM2 / AS3制作了一个反编译器,我注意到Flash编译器往往会发出大量不必要的代码.例如,对于某个应用程序,我删除了大约10%的代码而没有任何功能损害.它只是一个肯定死的代码,没有被条件操作码和异常处理块引用. 另外,请看这个片段: ... 313 setprope
我最近为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完成了所有的优化工作.您可以提出更糟糕的例子,例如添加两个常量.所以答案是:对不起,它只是没有优化.将来可能会有更好的编译器.现在你必须依靠AS3 JIT在运行时进行优化工作(它做得不错!)或者使用不同的编译器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读