8

我有完全相同的 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 大小?

4

7 回答 7

10

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

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

于 2008-11-11T19:39:24.770 回答
7

几乎可以肯定,这些差异来自机器之间不同的编译器设置。例如,打开或关闭 Range Checking 会稍微改变可执行文件的结果大小。

最新版本的 Delphi 的优点之一是使用了 MSBuild,它可以轻松确保任何给定构建的设置都是相同的。

于 2008-11-11T18:17:01.270 回答
4

嗯……

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

结论:

Windows版本越晚,随机插入的“填充物”越多,以增加可信度。如果它占用更多空间,那么它一定更强大,而且它可能是由世界上最好的工程师编写的!:-)(对不起——我在微软工作太久了!)

于 2009-06-10T05:28:45.050 回答
3

对于 Delphi/BCB,有几个因素会影响大小:

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

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

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

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

于 2008-11-11T17:31:22.877 回答
1

IIRC,在进行微小更改后重新编译也可能留下杂乱无章的东西 - 我猜是智能编译器的副作用之一:}

于 2008-12-18T22:11:54.333 回答
1

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

CodeGear 质量控制

Borland Delphi 新闻组

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

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

于 2009-03-13T17:59:18.760 回答
0

实际上它比比有趣得多。

即使在同一台机器上连续多次重新构建相同的应用程序,在两次编译之间绝对不更改配置,也会产生大小略有不同的可执行文件。我构建了一个特定的项目 10 次并获得了 10 个(!)不同的可执行文件大小 - 每次都不同的大小!

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

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

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

于 2009-03-13T17:46:27.030 回答