关于D语言的目标文件体积

刚才和hurd讨论D的文件尺寸问题,自己尝试时发现了一点线索。

 

我试了一下,用-g生成的dwt程序大约3m,用-O -release(没有inline)生成的程序大约2m。

 

然后把它分分别反汇编了一下,release版代码段占用约40%,数据段占用约60%。(-g版是3:7)
由于代码段没什么规律性,所以大多数压缩程序对代码段的压缩比都不明显(从各压缩结果的大小比较接近代码段大小,就可以看出来)
所以关键的部分就在于数据段了。

 

我生成的dwt程序数据段,体积比较大的主要是以下部分:
dwt中import的swt的properties文件              (文本内容,比较容易被压缩)
程序中使用的各种常量,主要是字符串常量        (当然大部分也是文本内容)
dll和api函数名     (还是文本内容)
各种类结构的定义   (很有规律,甚至包含大量0值字节仅用于占位,所以也很较容易被压缩)

 

最后还有一部份就是段的定义大小与实际使用大小间的剩余空间,都是以0填充的,也可以轻易压缩掉。

 

所以D程序可以很容易的压缩到接近代码段,甚至略小于代码段的体积。

 

可是为什么目标文件结构比较接近的C++比D要小呢?
我觉得主要是因为D
设计使得类更容易被继承,tango和dwt中被嵌套了四五层对上的类很常见,在C++中这种的情况却还多,这使得目标代码要存放更多的类的结构信息。
从phobo生成的目标文件通常小于tango的目标文件,就可以说明这一点。

 

目标大小对程序运行有没有影响?
我觉得影响不太,实际上对大小过分的优化可能会影响程序的性能,比如在类操作时还原类的结构信息,这无形上增加了cpu的开销。当然也可以在程序执行前一次性还原类的结构信息,不过这就和压缩工具就没有什么本质区别了。

 

最后程序可以压缩到多大?
如果没有import一些压缩过的、或者不容易被压缩的文件的话,就像上面所说的,应该可以被压缩到接近代码段的大小。

你可能感兴趣的:(数据结构,C++,c,C#,D语言)