终于明白为什么Flash Player迟迟出不了64位版本了

板子要打在macromedia身上,因为在那Internet的蛮荒岁月,macromedia为了尽可能的减少swf文件的尺寸,在一部分对象中采用非字节对齐的文件格式。

简单的说,一部分对象不是以int/short这样存储的,而是以bit位这样存储的。

 

让我们看一个例子,例如Rect结构,在swf文件中的存储格式:

 

假设有一个700x350的Rectangle,在swf文件的存储如下(以2进制表示)

 

01111000,00000000,00000110,11010110,00000000,00000000,00001101,10101100,00000000,00000000,00011000,00000010,00000000,01000100,00010001,00011001

--------==============--------------------------==============--------------------------

储存每          xMin                            xMax                          yMin                       yMax

维长度

的bit数

 

Rect结构储存如下:

首5个字节代表了之后长宽高的bit数,这里是01111 ,换成10进制是15,代表后面每15个字节就是一维长度

xMin一看就知道,十进制是0

xMax的2进制表示是 011011010110 ,换成10进制是14000

yMin同样一看就知道十进制是0

yMax二进制表示是001101101011000,换成10进制是7000

 

所以这个Rectangle的四维分别是width = 14000, height=7000

 

??前面不是说长宽分别是700x350么?

 

天哪,adobe开源的swf文件格式在Using bit values里的例子有点瑕疵,所以这个问题也困扰了我半天。其实14000的单位是twips,20twips=1pixel

所以长宽仍然是14000/20 = 700, 7000/20 = 350

 

 

所以可以看出,当时macromedia在设计swf的时候,隐含就是假设一个int=32位,所以酱紫不知道怎样才可以扩展成64位。

恐怕Adobe在收购以后才发现,macromedia原来这么原始……

所以或许Adobe要重新编写虚拟机才能顺利的拓展成64位。但是从flex的sdk来看,我觉得Adobe在语言上并不擅长。

这也告诉我们,为了性能而做的bad design总会在将来的某一天成为你的梦魇。

 

好了,休息,休息一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值