【问题标题】:What can influence Delphi executable size?什么会影响 Delphi 可执行文件的大小?
【发布时间】:2008-11-11 17:22:25
【问题描述】:

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

【问题讨论】:

  • 大不同?能举个例子吗?
  • vlceBerg,添加了你问的例子。
  • 相同的操作系统版本?安装相同的SP?相同的文件系统?
  • 添加了这样的信息。它会影响 exe 大小吗?

标签: delphi delphi-7


【解决方案1】:

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

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

【讨论】:

  • 感谢吉姆。将尝试并尽快发布结果
  • 对不起,吉姆。不正确。 请参阅我的帖子以获取解释原因的链接。
  • 其实肯,可能两者都有,但我不知道你指出的问题。
【解决方案2】:

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

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

【讨论】:

  • 我们的 DPR 文件肯定是一样的。范围检查是一个项目选项。我看不到任何可能影响生成的可执行文件大小的 IDE 选项。
【解决方案3】:

嗯……

SizeOf(XPSP2.exe)

结论:

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

【讨论】:

  • 这绝对是一个统计趋势:)
【解决方案4】:

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

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

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

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

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

【讨论】:

  • 史蒂夫 - 这是一个完全不同的问题的好答案;-)
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

    CodeGear Quality Control

    Borland Delphi newsgroups

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

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

    【讨论】:

      【解决方案7】:

      实际上它比比有趣得多。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 2011-03-13
        • 2022-12-11
        • 2015-03-19
        • 2011-03-30
        • 2016-11-15
        • 1970-01-01
        相关资源
        最近更新 更多