我有完全相同的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大小?
答案 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)
答案 5 :(得分:1)
实际上,这是一个已经存在很长时间的问题。参见
最近在Delphi newsgroups(http视图)上对此进行了讨论。
它与组件安装或类似的东西完全无关;实际上,最后一个引用提到了与每个编译/构建时插入到应用程序中的时间戳有关的事情。此外,如果您正在进行构建并且包含版本信息,并且将内部版本号设置为自动增量,则这也会导致二进制差异。
答案 6 :(得分:0)
实际上它比它更有趣。
甚至在同一台机器上重复构建相同的应用程序,连续几次,在编译之间完全不对配置进行任何更改,生成大小略有不同的可执行文件。我构建了一个特定的项目10次并获得了10个(!)不同的可执行文件大小 - 每次都有不同的大小!
我注意到这种现象只发生在足够大小/复杂的项目上。
如果在相对简单的项目上执行此操作,则可执行文件的大小将相同,即使仍存在内部差异(如果进行二进制比较)。我现在没有时间对此进行调查,但我有点好奇。
请注意,仅仅进行编译,即实际上只是重新链接应用程序,并不会改变生成的可执行文件的大小,但它会改变其内容(生成的二进制文件不相同)。