2017-02-10 2 views
2

J'ai 2 questions à propos de la fonctionnalité précompilé-en-têtes C++.En-têtes précompilés en C++ de taille énorme

1.Qu'est-ce qui se passe réellement lorsque vous créez un fichier .gch (en utilisant GCC), qu'est-ce qu'il contient?

2.Pourquoi ces fichiers sont si énormes en taille, mais l'exécutable final est si petit.

Répondre

2

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.