2008-11-11 96 views
8

我有非常相同的德尔福版本,bpls,组件,一切。然而,在三台机器中,结果可执行文件的大小不同。 还有什么可以影响exe的大小?什么会影响Delphi可执行文件的大小?

在我的机器我得到这个尺寸(Vista的6.0.6001):

4.547.584 bytes 

在我同事的机器,他得到(XP SP3 5.1.2600):

4.530.688 bytes 

在第三他会得到:(XP 5.1.2600 SP2)

4.527.104 bytes 

操作系统版本是否影响编译的exe大小?

+0

差异很大?你能举个例子吗? – vIceBerg 2008-11-11 17:23:10

+0

vlceBerg,添加像你问的例子。 – 2008-11-11 17:26:20

+0

相同的OS版本?同一个SP安装?相同的文件系统? – vIceBerg 2008-11-11 17:27:46

回答

10

这似乎是配置差异,或者如果你在三台机器之间安装了不同的组件版本。我会建议创建一个空白表单,然后在确认构建设置相同后,在全部3上尝试它。如果相同,则添加一些第三方组件,直到找到不同的第三方组件。

此外,您可能有不同版本的德尔福(主要或次要/更新版本)。

3

使用Delphi/BCB这些都是可以影响大小的几个因素:

生成配置:释放模式在调试部分没有链接到EXE(默认情况下),所以更小。你也可能从代码优化中获得提升。

与动态RTL链接:如果启用,您的EXE会更小,但您需要使用外部库。

使用运行时软件包构建:如果启用,则动态链接到您使用的运行时软件包,而不是直接将它们链接到EXE中。这可能会导致最大的尺寸差异。

他们是其他因素,但上述往往是我遇到的主要问题。

+0

史蒂夫 - 这是一个完全不同的问题的好回答;-) – Roddy 2008-11-11 17:35:53

7

差异几乎肯定来自机器之间的不同编译器设置。例如,打开或关闭“范围检查”将稍微改变可执行文件的结果大小。

有关最新版本的Delphi的好处之一是使用MSBuild,它可以很容易地确保任何给定构建的设置都是相同的。

1

IIRC,重新编译制作的微小变化也可能留下克鲁夫特周围铺设后 - 一个FO智能编译器的副作用,我想:}

0

其实它比远远超过有趣。

即使在同一台机器上重复构建相同的应用程序,连续几次,在编译过程中绝对不对配置进行任何更改,从而生成大小略有不同的可执行文件。我构建了一个特定的项目10次,并获得了10(!)个不同的可执行文件大小 - 每次都有不同的大小!

我注意到,这种现象只发生在足够的大小/复杂的项目,虽然。

如果这样一个相对简单的项目,可执行文件将是相同的大小,尽管仍然会有内部的分歧(如果你做一个二进制比较)。我现在没有时间去调查这件事,但我有点好奇。

注意,仅做一个编译的,即有效地只需重新连接应用,不改变所得到的可执行文件的大小,但它确实改变其内容(生成的二进制文件是不相同)。

1

实际上,它是一直存在了相当一段时间的问题。见

CodeGear Quality Control

Borland Delphi newsgroups

最近的这对Delphi newsgroups(HTTP视图)的讨论。

它绝对无关的成分差安装之类的东西;实际上,最后一个参考文献提到了在每个编译/构建中插入到应用程序中的时间戳。此外,如果您正在构建并包含版本信息,并且将内部版本号设置为自动增量,则这也会导致二进制差异。

4

嗯...

中SizeOf(XPSP2.EXE)<中SizeOf(XPSP3.exe)<中SizeOf(Vista.exe)

结论:

后来的Windows版本中,随机插入更多的“填充物”以增加可信度。如果需要更多的空间,那么它一定更强大,而且它可能是由世界上最好的工程师编写的! :-)(抱歉 - 我一直在微软工作太久!)

相关问题