2009-10-01 55 views
1

假設有一個相當複雜的課程,我正在努力。一半的方法已經完成並經過測試,但我仍在開發另一半。如果我將完成的代碼放在一個cpp中,其餘的放在另一個cp中,那麼Visual Studio(或者其他任何IDE就這一點而言)編譯速度會更快,因爲我只更改了「正在運行」cpp中的代碼?將代碼拆分爲幾個.cpps會減少編譯時間嗎?

謝謝!

+0

我想,你必須閱讀這個線程 - http://stackoverflow.com/questions/364240/how-do-you-reduce-compile-time-and-linking-time-for-visual-c-projects -native – adatapost 2009-10-01 01:28:06

+0

正如其他海報指出的那樣,它可能會更快地編譯,但我懷疑你會注意到它們之間的差異。但是,爲什麼你不試試它(應該很快完成),並在這裏報告你的經驗:-) ... – MartinStettner 2009-10-01 01:44:36

回答

1

這真的取決於。對於一個非常大的項目,鏈接時間通常比編譯單個文件的時間要昂貴得多。在我們的工作代碼庫(基於虛幻引擎的遊戲)中,我們實際上發現,製作包含許多其他文件(實際上更少的翻譯單元)的「bulk.cpp」文件會顯着縮短翻轉時間。儘管個別編譯時間增加了一小部分,但整體編譯時間(完全重建)和鏈接時間(甚至發生小的變化)都大幅下降。

+0

這被稱爲統一構建 – 2009-10-01 11:03:53

+1

虛幻引擎使用術語「批量構建」,所以這是非常常見的術語遊戲產業但「統一建設」是一回事。我也聽說過「Uber-Build」,但幾乎沒有。 除了整體預處理器時間的明顯減少,我們發現連接器時間(幾分鐘)顯着減少,特別是在像虛幻引擎這樣的模板繁重的代碼中。 Bulk/Unity Builds的一個好處是你的代碼可以運行得更快(更大塊的代碼可以讓編譯器更好地優化 - 尤其是函數內聯)。 – Adisak 2009-10-01 15:52:36

0

只要頭文件不變(假設兩個.cpp包含相同的頭文件),那麼只有被更改的.cpp文件將被編譯。

這對大多數IDE來說至少是正確的。我沒有直接調用gcc等編譯器的經驗,所以我不能對此發表評論。

2

是的,我相信Visual Studio會逐步編譯,所以只要你點擊Build而不是Rebuild All,你應該通過拆分來縮短編譯時間。

但是,由於代碼因子的原因,你應該真的被分開,即每個類應該有一個單一的目的等等等等。我相信你知道。

0

答案可能是肯定的,因爲您可能會執行增量構建(僅編譯更改的.cpp)和預編譯頭文件。如果你沒有使用這些功能,那麼你會得到較慢的構建。我很確定默認的Visual Studio C++項目同時使用增量構建和預編譯頭文件。

0

是的,它會更快。

但更重要的是:不要擔心,如果你的班級太大,以至於在現代化的處理器上花費大量時間,神的方式就是說你的班級需要重構爲更小的部分。

相關問題