2017-02-10 25 views
2

C++プリコンパイル済みヘッダー機能に関する2つの質問があります。サイズが巨大なC++プリコンパイル済みヘッダー

1. .gchファイルを(GCCを使用して)作成すると実際に何が起こっているのですか?

2.これらのファイルはサイズが非常に大きいですが、最終実行ファイルは非常に小さいです。

答えて

2

あなたはヘッダをプリコンパイルすると、それはすべての通常のコンパイルのように始まります:

  • プリプロセッサが実行され、任意の依存ヘッダを含むと
  • 結果のソースコードをマクロ置換を行うことがコンパイラにかけ投手ですそして、コンパイラはAST、コード
セマンティクスをエンコードするデータ構造を生成し、それを解析して構文
  • を検証します

    通常、これはファイル.cppで行われ、実際にASTをコンパイルして実行可能コードを生成するために、その後に続きます。ただし、ヘッダーのプリコンパイルが停止し、コンパイラはASTを.gchファイル内にダンプします。

    このプリコンパイル済みヘッダーをさらに使用すると、コンパイラーはファイルからASTを直接ロードしてそこから取得し、上記の高価な処理をスキップできます。

    .gchファイルは、元のヘッダーに暗黙のうちに多くの情報が含まれているため、膨大です。しかし、最終的な実行可能ファイルのサイズとは関係がありません。コンパイルされたヘッダーの有無にかかわらずコンパイルすると、まったく同じ結果が生成されます。

  • 関連する問題