2011-01-21 11 views
5

Pytanie dotyczy zawartości pliku binarnego .pch utworzonego przez kompilator Visual Studio. Co zawiera? Czy jest to tylko parsowane drzewo plików nagłówkowych, czy też kod obiektowy?Co zawierają prekompilowane nagłówki Visual Studio?

Rozważmy następujący przykład:

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

Czy tym ten nagłówek w zestawie zostać skompilowane doprowadzić do całkowitego konkretyzacji szablonu wektora <int> opracowywane i dodawane do .pch?

Dać trochę więcej kontekstu; jeśli tylko drzewo analizy jest prekompilowane, oznacza to, że kod obiektu dla utworzonych szablonów będzie nadal tworzony raz na jednostkę kompilacji, co spowoduje zwiększenie czasu kompilacji i łączenia. Tak więc "budowanie jedności"/redukowanie jednostek kompilacji nadal będzie istotnym czynnikiem skracającym czas budowania nawet przy włączonych prekompilowanych nagłówkach.

Odpowiedz

1

Chociaż nie mogę powiedzieć określoną rzeczą wewnętrzna PCH, jak jedność buduje, nawet jeśli jest w pełni vector<int> instancja w PCH, myślę jedność buduje wciąż ma pewną przewagę.

Jak być może wiesz, C++ musi zachować jedną regułę definicji (ODR). Linker musi zjednoczyć definicje szablonów rozproszone w każdym pliku obiektów do jednego obiektu .
To jest, z grubsza rzecz biorąc, C++ musi wykonać następujące czynności:

  1. instancji szablonów
  2. plik Zapis obiekt
  3. Reread plik obiektowy dla łącza
  4. Resolve ODR

Jedność buduje pozwalają w pewnym stopniu zapisać powyższe obciążenie.
Jednak nie mogę powiedzieć, że powyższe oszczędności przekroczą system kompilacji nie-jedności z PCH w twoim środowisku.

Powiązane problemy