Delphi:带有内置包的 .exe:600kb,.exe 外部 BPL:6MB。这是为什么?

Delphi: .exe with built-in packages: 600kb, .exe + external BPLs: 6MB. Why is that?

如果我用内置包在delphi中编译.exe文件,它会生成大约600kb的EXE文件。但是,如果我使用运行时包编译它,大小的总和(.exe 所有必需的 .BPL)约为 6-8 MB(取决于编译器的版本)。为什么差异如此显着?


因为如果您运行正常编译,链接器可以在 DCU 上执行"智能链接"并删除您的程序永远不需要的代码。但是这些包是预构建的,并且包含了所有代码,因此您无法将它们智能链接到更小的尺寸。


我认为当您生成带有内置 BPL 的程序时,您会假设所有 BPL 文件都已链接。事实并非如此。在编译的最后阶段,Delphi 编译器将所有内容链接在一起。它省略了 BPL 中的模块,但您的程序没有直接或间接调用这些模块。

因此,您最终得到的占用空间要小得多,只有实际需要的模块在最终的 exe 中。