`
tomqyp
  • 浏览: 25686 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于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一些压缩过的、或者不容易被压缩的文件的话,就像上面所说的,应该可以被压缩到接近代码段的大小。

分享到:
评论
6 楼 flyingxu 2008-11-25  
我觉得和d语言没有关系,是dwt的问题
用dfl的win程序就都很小,不到1m。
5 楼 hurd 2008-11-17  
LLVM supports effective optimization at compile time, link-time (particularly interprocedural), run-time and offline (i.e., after software is installed), while remaining transparent to developers and maintaining compatibility with existing build scripts.
4 楼 hurd 2008-11-16  
资源大的话import前先gz下,运行时解压。

upx能把22M压缩到800kb,  LDC多少也要改善下吧。
3 楼 tomqyp 2008-11-16  
引用

hurd
希望LDC能对这个问题有所改善,似乎很快windows32版本的LDC就可以工作了。


自从有了import的新用法后,现在似乎很多库都很流行把要用的资源文件直接import进来,如果import了大量二进制文件的话,我想即使是LDC也没有什么好办法可以解决吧。
2 楼 tomqyp 2008-11-16  
另外我想可能还有个原因影响了D语言的文件尺寸。

原本在C中许多很容易被发现没有使用过的函数、结构,在D中用类一封装,就不是那么容易判断了,然而许多D库刚好就是对对C库的封装,甚至是C++>C>D这样封装。

动态库或者api的话到无所谓,静态库的话,链接器肯定会把那些它不能确定没有使用的函数和结构都链接到程序中,链出一个超大文件也就不足为奇了。
1 楼 hurd 2008-11-16  
希望LDC能对这个问题有所改善,似乎很快windows32版本的LDC就可以工作了。

相关推荐

    中职计算机应用基础第一章习题与答案.doc

    机器语言 D.高级语言 9.主要决定微机性能的是( )。 A.CPU B.耗电量 C.质量 D.价格 10.微型计算机中运算器的主要功能是进行( )。 A.算术运算 B.逻辑运算 C.初等函数运算 D.算术运算和逻辑运算 11.MIPS常用来描述...

    计算机应用基础(专升本).docx

    能够将高级语言源程序加工为目标程序的系统软件是_____(4分) (A) 解释程序(B) 汇编程序(C) 编译程序(D) 编辑程序标准答案是:C 11. 在Windows 中,可以设置、控制计算机硬件配置和修改显示属性的应用程序是_____(4 ...

    dagon:D的3D游戏引擎

    该项目的目标是为D语言创建一个现代的,易于使用的,可扩展的3D游戏引擎。 Dagon基于OpenGL 4.0核心配置文件。 它适用于32位和64位Windows和Linux。 它不支持macOS,因为Apple不再支持OpenGL。 Dagon仍在开发中,...

    计算机应用基础作业一---答案(1).doc

    A:字节 B:位 C:字 D:KB 答案: B 8、能够将高级语言源程序加工为目标程序得系统软件就是____。 A:解释程序 B:汇编程序 C:编译程序 D:编辑程序 答案: C 9、计算机得硬件系统由五大部分组成,下列各项中不属于这五...

    计算机应用基础作业一---答案.doc

    A:字节 B:位 C:字 D:KB 答案: B 8、能够将高级语言源程序加工为目标程序的系统软件是____。 A:解释程序 B:汇编程序 C:编译程序 D:编辑程序 答案: C 9、计算机的硬件系统由五大部分组成,下列各项中不属于...

    计算机基础选择题..doc

    (A)源操作数和目标操作数 (B)数字和文字 (C)ASCII码和汉字代码 (D)操作码和操作数 14、下面关于显示器的四条叙述中,有错误的一条是______。 (A)显示器的分辨率与微处理器的型号有关 (B)显示器的分辨率为1024×768...

    复习题一计算机应用基础1.docx.docx

    A:字节 B:位 C:字 D: KB 答案:B 8、 能够将高级语言源程序加工为目标程序的系统软件是—。 A:解释程序 B:汇编程序 复习题一计算机应用基础1全文共7页,当前为第2页。复习题一计算机应用基础1全文共7页,当前...

    网管教程 从入门到精通软件篇.txt

    ASM:汇编语言源文件,Pro/E装配文件 ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;ClarisWorks“助手”文件 Axx:ARJ压缩文件的分包序号文件,用于将一个大...

    计算机应用技术基础任务1任务2答案.doc

    用GHOST快速恢复系统时,如果有多个目标硬盘和目标分区,可以随意选择B. 正确 15. 如果没有正确安装设备驱动程序,电脑有些硬件可能无法正常使用B. 正确 16. MODEM是上网必须的网络设备B. 正确 17. 计算机申请了...

    C++复习资料之系列

    用C++语言编制的源程序要变为目标程序必须要经过( d )。 (a) 解释 (b) 汇编 (c) 编辑 (d) 编译 3.C++程序基本单位是( c )。 (a) 数据 (b) 字符 (c) 函数 (d) 语句 4. C++程序中的语句必须以( b )结束。 ...

    同学的打包代码

    13、(选做)题目:微型学生养成系统(每个学生都可以选,以完成程度、个性化设计为主要考核目标) 在这个课程设计中,你需要设计并实现如下场景:在那山的那边,湖的那边,有一所学校,学校里有一幢宿舍楼,宿舍楼有...

    基于AT89S52 单片的频率计

    会到keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑, 容易理解。在开发大型软件时更能体现高级语言的优势。 Keil C51 可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人 员可用IDE...

    双系统修复工具

    * 当前系统/WinPE使用Ghost32/Ghost64/Ghostexp或DOS下使用Ghost把相应的gho文件恢复/提取至目标分区,目标分区可以为逻辑分区或非活动主分区,用本工具的“自动修复/手动修复”功能修复相应分区的Win系统即可。...

Global site tag (gtag.js) - Google Analytics