簡體   English   中英

使用多個文件C而不是將它們全部放入單個文件中時,二進制文件是否有所不同?

[英]Is there a difference in a binary when using multiple files C as opposed to putting it all into a single file?

我知道到目前為止,多個文件將使代碼更容易。 但是,它們是否在“全部塞入一個文件”之間提供了性能差異,還是像gcc這樣的現代編譯器會為兩者創建相同的二進制文件。 當我說性能差異時,是指文件大小,編譯時間和運行時間。

這僅適用於C。

可以說,使用多個文件可以縮短編譯時間,因為您只需要重新編譯已更改的文件(假設您有一個不錯的依賴項跟蹤構建系統)。

鏈接可能需要更長的時間,因為還有更多工作要做。

傳統上,編譯器無法跨多個源文件執行優化(內聯函數之類的東西很棘手)。 因此,生成的可執行文件可能會有所不同,並且可能會變慢。

當所有內容都在一個文件中時,有更多的優化機會。 例如,以-O2開頭的gcc會內聯某些函數,即使它們的主體可用,即使它們沒有被聲明為內聯(甚至更多的函數都可以使用-O3內聯)。 因此,運行時間有所不同,有時您甚至有機會注意到它們。 使用-fwhole-program甚至可以告訴GCC您除了關心main()之外,不需要關心外部函數的離線版本(GCC的行為就像您所有的外部函數都變成靜態的一樣)。

整體編譯時間可能會增加(因為要分析的東西更多,並且並非所有優化器算法都是線性的)或減少(當不需要多次解析相同的標頭時)。 二進制大小可能會增加(由於內聯,以換取更快的運行速度)或減小(可能性較小;但有時,內聯會將調用者的代碼簡化到代碼大小減小的程度)。

為了簡化開發和維護,您可以使用sqlite的方法:它具有多個源文件,但是在編譯之前將它們合並為一個(“合並”)。

從某些測試來看,編譯和鏈接需要更長的時間。 您將收到一個不同的二進制文件,至少我是這樣做的,但是我的二進制文件在另一個字節的范圍內。

多文件版本運行於.000764 MS 。多個文件版本運行於.000769 MS 。就像我花了大約5分鍾的時間就把它放在一起一樣,這確實是一個很小的程序。

因此,實際上總體上沒有差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM