2017-02-10 34 views
2

我有2個關於C++預編譯頭文件功能的問題。C++預編譯頭文件大小很大

1.製作.gch文件(使用GCC)時實際發生了什麼,它包含了什麼?

2.爲什麼這些文件的大小很大,但最終的可執行文件非常小。

回答

2

當預編譯的報頭,這一切開始等的通常的編譯:

  • 預處理器運行時,包括任何依賴的報頭並執行宏替換
  • 將所得的源代碼是彎到編譯器,其分析它並驗證語法
  • 然後編譯器產生的AST,其編碼語義代碼
的數據結構

通常,這是在.cpp文件上完成的,然後繼續實際編譯AST並生成可執行代碼。但是,預編譯頭文件停止在那裏,並且編譯器將.gch文件中的AST轉儲。

在進一步使用這個預編譯頭文件後,編譯器可以直接從文件中加載AST並從那裏讀取,從而跳過上面列出的昂貴處理。

.gch文件非常龐大,因爲它包含了很多隱含在原始標題中的信息。但它與最終可執行文件的大小沒有關係 - 編譯時使用和不使用預編譯頭文件應該會產生完全相同的結果。