什么能影响Delphi的可执行文件大小?

时间:2008-11-11 17:22:25

标签: delphi delphi-7

我有完全相同的delphi版本,bpls,组件,一切。然而在三台机器中,生成的可执行文件的大小不同。 还有什么可以影响exe的大小?

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

4.547.584 bytes

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

4.530.688 bytes

在第三个大学中,他得到:(XP 5.1.2600 SP2)

4.527.104 bytes

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

7 个答案:

答案 0 :(得分:10)

似乎是配置差异,或者如果您在三台计算机之间安装了不同版本的组件。我建议您在验证构建设置是否相同后,创建一个空白表单并在所有3上尝试。如果它是相同的,那么添加一些第三方组件,直到找到不同的组件。

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

答案 1 :(得分:7)

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

最新版本的Delphi的一个好处是使用MSBuild,它可以轻松确保任何给定版本的设置都相同。

答案 2 :(得分:4)

嗯...

SizeOf(XPSP2.exe)< SizeOf(XPSP3.exe)<一下SizeOf(Vista.exe)

结论:

Windows的版本越晚,随机插入的“填充程序”越多,以增加可信度。如果它需要更多空间,那么它必须更强大,它可能由世界上最好的工程师编码! :-)(对不起 - 我已经在微软工作太久了!)

答案 3 :(得分:3)

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

您的构建配置:发布模式未在调试部分中链接到EXE(默认情况下),因此更小。你也可以从代码优化中获得提升。

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

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

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

答案 4 :(得分:1)

IIRC,在进行细微更改后重新编译也可能会留下残余的问题 - 智能编译器的副作用之一,我想:}

答案 5 :(得分:1)

实际上,这是一个已经存在很长时间的问题。参见

CodeGear Quality Control

Borland Delphi newsgroups

最近在Delphi newsgroups(http视图)上对此进行了讨论。

它与组件安装或类似的东西完全无关;实际上,最后一个引用提到了与每个编译/构建时插入到应用程序中的时间戳有关的事情。此外,如果您正在进行构建并且包含版本信息,并且将内部版本号设置为自动增量,则这也会导致二进制差异。

答案 6 :(得分:0)

实际上它比它更有趣。

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

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

如果在相对简单的项目上执行此操作,则可执行文件的大小将相同,即使仍存在内部差异(如果进行二进制比较)。我现在没有时间对此进行调查,但我有点好奇。

请注意,仅仅进行编译,即实际上只是重新链接应用程序,并不会改变生成的可执行文件的大小,但它会改变其内容(生成的二进制文件不相同)。