2011-01-21 9 views
5

La pregunta se refiere al contenido del binario .pch creado por el compilador de Visual Studio. ¿Qué contiene? ¿Es solo el árbol analizado de los archivos de encabezado, o el código objeto también?¿Qué contienen los encabezados precompilados de Visual Studio?

Considere este ejemplo:

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

cabe indicar como esta cabecera en el conjunto que se compilan previamente en un resultado de instancias de plantilla completa del vector <int> ser compilado y se añade a la .pch?

Para dar un poco más de contexto; si solo se precompila el árbol de análisis sintáctico, esto significa que el código objeto para plantillas instanciadas se creará una vez por unidad de compilación con los consiguientes aumentos en el tiempo de compilación y enlace. Por lo tanto, "compilaciones unitarias"/unidades de compilación reducidas seguirían siendo un factor relevante para disminuir el tiempo de compilación incluso con los encabezados precompilados habilitados.

Respuesta

1

Aunque no puedo decir cosa definida por el interior del PCH, como para la unidad construye, incluso si se vector<int> instanciar completamente en PCH, Creo que la unidad se basa todavía tiene alguna ventaja.

Como ya sabrá, C++ debe mantener una regla de definición única (ODR). Linker tiene que unir las definiciones de plantilla dispersas en cada archivo de objeto en .
Eso es, en términos generales, C++ tiene que hacer lo siguiente:

  1. plantillas instanciar
  2. Escribir archivo objeto
  3. fichero objeto Vuelve a leer para el enlace
  4. ODR Resolver

construye la Unidad Permiten guardar la carga anterior en algún grado.
Sin embargo, no puedo decir que el almacenamiento anterior exceda el sistema de compilación que no es unitario con PCH en su entorno.

Cuestiones relacionadas