2011-01-21 87 views
5

該問題涉及由Visual Studio編譯器創建的.pch二進制文件的內容。 它包含什麼? 它僅僅是頭文件或目標代碼的解析樹嗎?Visual Studio的預編譯頭文件包含什麼?

考慮這個例子:

// myheader.h 
#include <vector> 
class A { 
public: 
    void add(int i) { v.push_back(i); } 
private: 
    std::vector<int> v; 
}; 

會包括在所述一組該頭中進行預編譯結果在矢量<INT>的完整模板實例被編譯並添加到.PCH?

給予更多的上下文;如果只對解析樹進行預編譯,這意味着實例化模板的目標代碼仍然會在每個編譯單元中創建一次,從而導致編譯和鏈接時間的增加。因此,即使啓用了預編譯頭文件,「統一構建」/減少編譯單元仍然是減少構建時間的相關因素。

回答

1

雖然我不能說對內部PCH, 明確的事情,作爲統一構建, 即使vector<int>在PCH完全實例, 我認爲統一建立仍具有一定的優勢。如你所知,C++必須保持一個定義規則(ODR)。 鏈接器必須將分散在每個對象文件中的模板定義合併爲一個。
也就是說,粗略地講,C++必須做到以下幾點:

  1. 實例化模板
  2. 寫入目標文件
  3. 鏈路重讀目標文件
  4. 解決ODR

統一建立可以在一定程度上節省上述負擔。
但是,我不能說上述保存將超過您的環境中PCH的非統一編譯系統 。

相關問題