2011-01-21 1 views
5

La domanda riguarda il contenuto del file binario .pch creato dal compilatore di Visual Studio. Cosa contiene? È solo l'albero analizzato dei file di intestazione, o anche il codice oggetto?Cosa contengono le intestazioni precompilate di Visual Studio?

Considerate questo esempio:

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

Sarebbe compresa questa intestazione nel set da precompilato risultato in un modello di istanza completa di vettore <int> essere compilato e aggiunto al PCH?

Per dare un po 'più di contesto; se solo l'albero di analisi è precompilato, ciò significa che il codice oggetto per i modelli istanziati verrà comunque creato una volta per unità di compilazione con conseguente aumento del tempo di compilazione e di collegamento. Quindi "unità crea"/riducendo le unità compilate sarebbe ancora un fattore rilevante nel diminuire i tempi di costruzione anche con le intestazioni precompilate abilitate.

risposta

1

Anche se non posso dire che cosa definitiva circa l'interno di PCH, come per l'unità costruisce, anche se vector<int> è completamente istanziati in PCH, credo che l'unità si basa ancora ha qualche vantaggio.

Come forse sapete, C++ deve mantenere una regola a definizione singola (ODR). Il programma di collegamento deve unire le definizioni del modello sparse in ogni file oggetto nello .
Questo è, grosso modo, C++ ha a che fare il seguente:

  1. istanziare modelli
  2. Scrivi file oggetto
  3. file oggetto Rileggi per il link
  4. Resolve ODR

Unità build rendere possibile il salvataggio del carico di cui sopra in una certa misura.
Tuttavia, non posso dire che il salvataggio di cui sopra supererà il sistema di compilazione senza unità con PCH nel proprio ambiente.