Lorsque vous précompilez un en-tête, tout commence comme une compilation habituelle:
- Le préprocesseur est exécuté, y compris les en-têtes à charge et effectuer la substitution macro
- Le code source résultant est händer vers le compilateur , qui analyse et valide la syntaxe
- Ensuite, le compilateur produit l'AST, la structure de données qui code pour les sémantique du code
Habituellement, cela est fait sur .cpp
fichiers, et se poursuit ensuite pour réellement compiler l'AST et générer du code exécutable. Cependant, une précompilation d'en-tête s'arrête là, et le compilateur vide l'AST dans le fichier .gch
. Sur d'autres utilisations de cet en-tête précompilé, le compilateur peut ensuite charger directement l'AST à partir du fichier et le récupérer à partir de là, en ignorant le traitement coûteux énuméré ci-dessus.
Le fichier .gch
est énorme, car il contient beaucoup d'informations implicites dans l'en-tête d'origine. Mais cela n'a aucun rapport avec la taille de l'exécutable final - compiler avec et sans en-têtes précompilés devrait produire exactement le même résultat.