2008-11-11 72 views
8

我有非常相同的德爾福版本,bpls,組件,一切。然而,在三臺機器中,結果可執行文件的大小不同。 還有什麼可以影響exe的大小?什麼會影響Delphi可執行文件的大小?

在我的機器我得到這個尺寸(Vista的6.0.6001):

4.547.584 bytes 

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

4.530.688 bytes 

在第三他會得到:(XP 5.1.2600 SP2)

4.527.104 bytes 

操作系統版本是否影響編譯的exe大小?

+0

差異很大?你能舉個例子嗎? – vIceBerg 2008-11-11 17:23:10

+0

vlceBerg,添加像你問的例子。 – 2008-11-11 17:26:20

+0

相同的OS版本?同一個SP安裝?相同的文件系統? – vIceBerg 2008-11-11 17:27:46

回答

10

這似乎是配置差異,或者如果你在三臺機器之間安裝了不同的組件版本。我會建議創建一個空白表單,然後在確認構建設置相同後,在全部3上嘗試它。如果相同,則添加一些第三方組件,直到找到不同的第三方組件。

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

3

使用Delphi/BCB這些都是可以影響大小的幾個因素:

生成配置:釋放模式在調試部分沒有鏈接到EXE(默認情況下),所以更小。你也可能從代碼優化中獲得提升。

與動態RTL鏈接:如果啓用,您的EXE會更小,但您需要使用外部庫。

使用運行時軟件包構建:如果啓用,則動態鏈接到您使用的運行時軟件包,而不是直接將它們鏈接到EXE中。這可能會導致最大的尺寸差異。

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

+0

史蒂夫 - 這是一個完全不同的問題的好回答;-) – Roddy 2008-11-11 17:35:53

7

差異幾乎肯定來自機器之間的不同編譯器設置。例如,打開或關閉「範圍檢查」將稍微改變可執行文件的結果大小。

有關最新版本的Delphi的好處之一是使用MSBuild,它可以很容易地確保任何給定構建的設置都是相同的。

1

IIRC,重新編譯製作的微小變化也可能留下克魯夫特周圍鋪設後 - 一個FO智能編譯器的副作用,我想:}

0

其實它比遠遠超過有趣。

即使在同一臺機器上重複構建相同的應用程序,連續幾次,在編譯過程中絕對不對配置進行任何更改,從而生成大小略有不同的可執行文件。我構建了一個特定的項目10次,並獲得了10(!)個不同的可執行文件大小 - 每次都有不同的大小!

我注意到,這種現象只發生在足夠的大小/複雜的項目,雖然。

如果這樣一個相對簡單的項目,可執行文件將是相同的大小,儘管仍然會有內部的分歧(如果你做一個二進制比較)。我現在沒有時間去調查這件事,但我有點好奇。

注意,僅做一個編譯的,即有效地只需重新連接應用,不改變所得到的可執行文件的大小,但它確實改變其內容(生成的二進制文件是不相同)。

1

實際上,它是一直存在了相當一段時間的問題。見

CodeGear Quality Control

Borland Delphi newsgroups

最近的這對Delphi newsgroups(HTTP視圖)的討論。

它絕對無關的成分差安裝之類的東西;實際上,最後一個參考文獻提到了在每個編譯/構建中插入到應用程序中的時間戳。此外,如果您正在構建幷包含版本信息,並且將內部版本號設置爲自動增量,則這也會導致二進制差異。

4

嗯...

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

結論:

後來的Windows版本中,隨機插入更多的「填充物」以增加可信度。如果需要更多的空間,那麼它一定更強大,而且它可能是由世界上最好的工程師編寫的! :-)(抱歉 - 我一直在微軟工作太久!)

相關問題