`
tomqyp
  • 浏览: 26251 次
  • 性别: 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就可以工作了。

相关推荐

    Js压缩工具 对JS文件压缩,缩小文件大小

    JS压缩的主要原理是通过删除不必要的空格、换行符和注释,以及通过变量和函数的混淆来减小文件体积。这种过程通常分为两个主要步骤:代码清理和代码混淆。 1. 代码清理:这个阶段主要负责删除代码中的空白字符,...

    dcef3中exe下面需要的locals文件

    3. 动态加载:在某些情况下,可以考虑动态加载本地化资源,而不是一次性打包所有语言的文件,以减少应用程序的体积。 4. 测试:在多种语言环境下测试应用,确保每个功能在不同的本地化设置下都能正常工作。 5. ...

    UPX可执行文件压缩软件

    关于标签"Delphi",Delphi是一种流行的面向对象的编程语言,基于Pascal,由Embarcadero Technologies开发。UPX可以很好地与Delphi编译的可执行文件配合使用,因为它支持PE(Portable Executable)格式,这是Windows...

    将其他文件追加到exe文件

    在软件开发领域,有时候为了减少应用程序的体积或者方便管理,开发者可能会选择将多个辅助文件合并到主执行文件(通常为.EXE文件)中。本文将详细介绍如何使用Delphi语言实现这一需求。 #### 二、技术背景 本示例...

    解析so文件

    当.so文件过大或者为了减少APK体积,可以考虑使用预编译的库(如armeabi、armeabi-v7a、arm64-v8a、x86、x86_64等),只包含目标设备所需的架构。Android Studio提供了 ABI 分割 功能,自动处理不同架构的.so文件...

    LUA语言编写经验

    > 你键入的每个命令(比如:”Hello World”)在你键入回车之后立即被执行,键入文件结束符可以退出交互模式(ctrl-D in Unix, ctrl-Z in DOS/Windows),或者调用 OS 库的 os.exit()函数也可以退出。 在交互模式下,LUA...

    新版汇编语言程序设计课后答案全集借鉴.pdf

    - 缺点:汇编语言依赖于特定的处理器架构,可移植性差,编写和调试工作量大,对程序员要求较高,且生成的目标程序往往体积较大,不利于优化。 5. 数制转换: - 十六进制到二进制和十进制的转换:例如,FFH转换为...

    exe文件脱壳步骤txt下载

    2. **压缩程序文件大小**:通过特殊的算法减小程序的体积,方便在网络上传输和在本地存储。 壳与普通的压缩软件(如RAR、ZIP等)的主要区别在于,壳不仅能够压缩程序文件,还能确保压缩后的程序能够像未压缩前一样...

    mfc 所需的dll

    2. **mfc42loc.dll**:这个文件可能与MFC的本地化功能有关,它包含了MFC库的特定语言支持,用于处理多语言环境下的应用程序。 3. **mfcd42d.dll**:这个文件的命名似乎有误,因为通常不会有"mfcd42d.dll"这样的...

    QT-Debug/Release版本发布所需要的dll文件

    QT框架是Qt公司开发的一款强大的跨平台应用程序开发框架,它基于C++语言并提供丰富的图形用户界面(GUI)工具和库。在开发完成后,为了让QT应用程序在其他没有安装QT环境的计算机上运行,我们需要将程序及其依赖的...

    de49已编译.7z

    如果"D49"是一个可执行文件,用户可能需要运行"copy de49.bat"来复制这个程序到目标位置,以便执行。如果"D49"是DLL,那么它可能被其他程序引用,作为功能扩展。 此外,Delphi支持版本控制、调试、单元测试等现代...

    VS2010_C++学习(2):BMP图像文件的处理

    它按照像素的原始值存储图像信息,没有进行任何压缩处理,因此文件体积相对较大。一个标准的BMP文件主要由四个部分组成: 1. **位图文件头(Bitmap File Header)** - **bfType**: 文件类型标识,对于BMP文件来说...

    汇编程序设计课后答案

    - **缺点**:汇编语言依赖特定的处理器架构,可移植性差,编写和调试复杂,且程序的体积通常较大,不利于优化。 此外,十六进制到二进制和十进制的转换是数字系统的基础。例如,FFH(11111111B)等于255D,0H(0B)...

    毕业设计基于51单片机设计的D类功率放大器word文档

    在【压缩包子文件的文件名称列表】中,唯一列出的文件是“毕业设计基于51单片机设计的D类功率放大器word文档”,这个文档很可能是整个设计的详细报告,包含了设计原理、硬件选型、软件编程、电路图、实验数据和结论...

    dll三合一压缩包

    然而,对于最终用户来说,通常只需要非调试版本的DLL文件,因为这些文件体积更小,且不需要调试信息。 在实际应用中,确保正确配置和使用这些DLL文件至关重要,否则可能会导致“找不到依赖项”或“应用程序无法启动...

    18F4520 12864驱动文件

    18F4520是属于PIC18系列的8位微控制器,它在嵌入式系统设计中广泛使用,特别是对于需要低功耗和小巧体积的项目。LCD12864则是一种128x64像素的图形点阵液晶显示器,常用于各种仪表盘、控制器面板或小型设备的用户...

    upx(Version 3.03)

    执行这个命令后,UPX会将目标文件恢复到未压缩的状态,通常会导致文件大小增加。 UPX的工作原理是通过高效的代码压缩算法,将原始可执行文件的机器码压缩,并在运行时动态解压到内存中执行。这种技术可以有效减少...

    Linux系统编程1

    例如,`-I`用于指定头文件的搜索路径,`-c`只进行预处理、编译和汇编,生成目标文件,`-g`包含调试信息,方便使用GDB进行调试,`-O`用于编译优化,`-Wall`开启所有警告信息,`-D<DEF>`在编译时定义宏。对于C++源文件...

    up_885392_cssmin-minified_mxrnpb.rar

    描述中提到,`cssmin-minified` 是一个用于CSS样式压缩的程序,它的主要目标是将CSS代码优化到最小体积,通过移除不必要的空格、换行和注释来实现这一目的。这有助于减小网站加载时间,提高页面性能,尤其在处理大量...

Global site tag (gtag.js) - Google Analytics