簡體   English   中英

預編譯頭設計問題

[英]Pre-Compiled Header Design Question

我有使用預編譯頭的代碼。 (之前由其他人完成)

在其中,它們包括幾個.h文件。

如果我有使用普通.h文件的類,這些文件當前不在現有的預編譯頭文件中,那么將它們扔在那里有什么好處呢? 也許編譯速度,但我認為它會清理類/標題有點過嗎?

對預編譯的標題有什么作用和不做什么?

通過從其他源文件中刪除這些標頭, 不要依賴預編譯標頭包含的標頭進行“代碼清理”。 如果你想停止使用PCH,這會造成噩夢。 您始終希望您的依賴項在每個源文件中都是顯式的。 只需將它們包含在兩個地方 - 它就沒有任何危害(假設您有適當的包括防護裝置)。

多個源文件包含的頭文件是包含在PCH中的良好候選者(特別是如果它很長)。 我發現我並沒有太認真地接受這個建議, 只能很少改變的標題放到PCH中。 但是,這取決於您的整體項目結構。 如果您經常進行完整構建,請務必避免此建議。 如果要最小化增量重建中的工作,那么這是一個考慮因素。 根據我的經驗,重建PCH的速度相對較快,而且總體編譯速度(大多數情況下)遠遠超過了編譯成本。 我不確定所有PCH系統是否足夠智能,以確定當PCH中包含的標題發生變化(VC ++)時,不需要重建每個源文件,但是明確地#include每個翻譯單元所需的一切必將促進這一(另一個原因是什么你PCH包括你應該依賴)

如果您的編譯器支持在編譯期間為每個文件顯示#include樹的選項,這對於識別應包含在PCH中的標題(顯示最多的標題)非常有幫助。 我最近在一個正在研究的項目(已經使用PCH,但不是最佳的)上完成了這項工作,並加快了750K系列C ++的構建,從大約1.5小時到15分鍾。

將不變系統包含到預編譯頭中。 這將加快編譯速度。 不要將您可能更改的任何自己的頭文件放入預編譯頭中,因為每次更改它們時都必須重建整個預編譯頭。

這是一個權衡:系統/庫標題肯定會出現在PCH中,因為它取決於您的項目中的標題。

我們的項目有大量生成的代碼,其更改頻率遠低於項目的其他部分。 這些標題放在PCH中,因為它們需要花費大量時間來處理每個單獨的文件。 如果你改變它們是昂貴的,但是你必須權衡這個成本與在文件中使用它們的更頻繁的較小節省。

暫無
暫無

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

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