Qu'est-ce que le format de fichier PCH ?
Un fichier .pch est un en-tête précompilé - un cache binaire du compilateur généré automatiquement pendant le processus de build. Plutôt que de ré-analyser des fichiers d'en-tête volumineux tels que le Windows SDK ou stdafx.h à chaque unité de compilation, le compilateur sérialise son état interne - tables de symboles, nœuds AST, définitions de macros, drapeaux de protection d'inclusion - dans un instantané .pch. Les unités de compilation suivantes chargent cet instantané directement, réduisant considérablement les temps de build pour les grands projets C et C++.
MSVC produit des fichiers .pch via le drapeau de compilation /Yc, généralement à partir d'un fichier source dédié nommé pch.cpp ou stdafx.cpp. Clang stocke ses en-têtes précompilés sous forme de flux binaire LLVM compressé, intégré dans un fichier objet natif dans une section nommée __clangast. L'équivalent de GCC utilise l'extension .gch plutôt que .pch.
Le format est entièrement interne au compilateur - propriétaire, binaire et non transférable entre machines. Un fichier .pch est invalidé dès que la version du compilateur, les drapeaux de compilation ou l'un des en-têtes inclus change ; le système de build le régénère automatiquement. Les tailles typiques varient de 10 Mo à plus de 200 Mo lorsque les en-têtes du Windows SDK sont inclus.
Les utilisateurs ne créent ni n'ouvrent jamais de fichiers .pch manuellement. En supprimer un est sans danger - le prochain build le recréera, et une reconstruction complète (clean rebuild) est le remède standard pour les erreurs PCH persistantes. Les Modules C++20 réduisent partiellement la dépendance aux en-têtes précompilés dans les nouvelles bases de code, mais le .pch reste le mécanisme dominant de vitesse de compilation dans les projets C et C++ existants.
Sécurité et sûreté
RISQUE : LOWUn fichier .pch est un artefact de build interne au compilateur. Il ne peut pas exécuter de code et n'est pas exécuté par l'OS. Aucun vecteur d'attaque significatif ; le fichier est généré localement par le système de build et est spécifique à la machine.
Détails du format
en bref- En-tête de préfixe Apple Xcode - Xcode (avant Swift) utilisait un en-tête de préfixe .pch (fichier source, pas binaire) pour précompiler les en-têtes Objective-C ; le concept est le même mais le fichier est un en-tête texte, pas la sortie binaire.
Programmes qui ouvrent les fichiers PCH
Détails techniques
spécifications approfondies| Type de fichier | Cache binaire du compilateur (AST sérialisé et état des symboles) |
| Encodage | Binaire (représentation interne au compilateur) |
| Ordre des octets | Little-endian (MSVC sur x86/x64) ; dépendant de la cible (Clang) |
| Conteneur | Blob binaire propriétaire (MSVC) ; fichier objet COFF/ELF/Mach-O avec section __clangast intégrée (Clang) |
| Compression | Aucune (MSVC) ; flux binaire LLVM compressé, basé sur zlib (Clang) |
| Taille typique | 10 Mo - 200 Mo ; le PCH du Windows SDK fait couramment 50-200 Mo |
| Drapeau de génération MSVC | /Yc crée le PCH ; /Yu le consomme dans les unités de compilation suivantes |
| Fichier source par défaut | stdafx.cpp ou pch.cpp dans les projets MSVC |
| Spécificité machine | Non transférable entre machines ; le PCH de MSVC inclut des informations d'adresse spécifiques à l'hôte |
| Invalidation | Régénéré automatiquement lorsque la version du compilateur, les drapeaux ou tout en-tête inclus change |
| Équivalent GCC | Extension .gch (les en-têtes précompilés GCC n'utilisent pas .pch) |
| Détection de version | MSVC intègre une signature interne ; rejette les fichiers PCH obsolètes en cas de non-correspondance de version ou de drapeau |
| Successeur C++20 | Les Modules C++20 (.ifc dans MSVC) remplacent partiellement le PCH dans les nouvelles bases de code |
| OS associé | Windows (MSVC), macOS (Xcode et Clang), Linux (Clang et GCC) |
| Publié | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Dernière version | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Spécification | learn.microsoft.com |
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers PCH.