2011-01-21 16 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回作成され、コンパイルおよびリンク時間が増加します。したがって、コンパイル単位を減らしてもコンパイル単位を減らすことは、プリコンパイルされたヘッダーが有効になっていても効果があります。

答えて

1

団結を構築するためとして、私はvector<int>が完全にPCHでインスタンス化されている場合でも、 をPCH、 の内部についての明確なことを言うことはできませんが、 私は団結がまだいくつかの利点が構築すると思います。

C++では、1つの定義ルール(ODR)を保持する必要があります。 リンカは、各オブジェクトファイルに分散されたテンプレートの定義を に統合する必要があります。
大まかに言えば、C++は、次のことを行う必要があり、次のとおりです。

  1. インスタンス化テンプレート
  2. 書き込みオブジェクトファイル
  3. リンク
  4. のための再読み込みオブジェクトファイル解決ODR

Unityが構築します上記の負荷をある程度軽減することができます。
しかし、あなたの環境では上記の節約が非統制のコンパイル システムとPCHを超えているとは言えません。

関連する問題