Hvad er PCH-filformatet?
En .pch-fil er en prækompileret header - en binær compiler-cache genereret automatisk under build-processen. I stedet for at gen-parse store header-filer som Windows SDK eller stdafx.h ved hver kompileringsenhed, serialiserer compileren sin interne tilstand - symboltabeller, AST-noder, makrodefinitioner, include-guard-flag - til et .pch-øjebliksbillede. Efterfølgende kompileringsenheder indlæser dette øjebliksbillede direkte, hvilket reducerer build-tiderne dramatisk for store C- og C++-projekter.
MSVC producerer .pch-filer via /Yc compiler-flaget, typisk fra en dedikeret stub-kildefil ved navn pch.cpp eller stdafx.cpp. Clang gemmer sine prækompilerede headere som en komprimeret LLVM-bitstream indlejret i en indfødt objektfil i en sektion kaldet __clangast. GCC's modstykke bruger filendelsen .gch i stedet for .pch.
Formatet er helt compiler-internt - proprietært, binært og kan ikke overføres mellem maskiner. En .pch-fil bliver ugyldig, hver gang compiler-versionen, compiler-flagene eller en inkluderet header ændres; build-systemet regenererer den automatisk. Typiske størrelser varierer fra 10 MB til over 200 MB, når Windows SDK-headere er inkluderet.
Brugere opretter eller åbner aldrig .pch-filer manuelt. Det er sikkert at slette en - det næste build genopretter den, og en «clean rebuild» er standardløsningen på vedvarende PCH-relaterede fejl. C++20 Modules reducerer delvist afhængigheden af prækompilerede headere i nye kodebaser, men .pch forbliver den dominerende mekanisme for kompileringshastighed i eksisterende C- og C++-projekter.
Sikkerhed og tryghed
RISIKO: LOWEn .pch er et internt compiler-build-artefakt. Den kan ikke køre kode og eksekveres ikke af operativsystemet. Ingen meningsfuld angrebsvektor; filen genereres lokalt af build-systemet og er maskinspecifik.
Formatdetaljer
kort fortalt- Apple Xcode Prefix Header - Xcode (før Swift) brugte en .pch prefix-header (kildefil, ikke binær) til at prækompilere Objective-C-headere; konceptet er det samme, men filen er en tekst-header, ikke det binære output.
Programmer der åbner PCH-filer
Tekniske detaljer
dyb specifikation| Filtype | Binær compiler-cache (serialiseret AST og symboltilstand) |
| Kodning | Binær (compiler-intern repræsentation) |
| Byte-orden | Little-endian (MSVC på x86/x64); målafhængig (Clang) |
| Container | Proprietær binær blob (MSVC); COFF/ELF/Mach-O objektfil med indlejret __clangast-sektion (Clang) |
| Komprimering | Ingen (MSVC); komprimeret LLVM-bitstream, zlib-baseret (Clang) |
| Typisk størrelse | 10 MB - 200 MB; Windows SDK PCH er typisk 50-200 MB |
| MSVC-genereringsflag | /Yc opretter PCH; /Yu bruger den i efterfølgende kompileringsenheder |
| Standard kildefil | stdafx.cpp eller pch.cpp i MSVC-projekter |
| Maskinspecificitet | Kan ikke overføres mellem maskiner; MSVC PCH indeholder værtsspecifik adresseinformation |
| Ugyldiggørelse | Regenereres automatisk, når compiler-version, flag eller en inkluderet header ændres |
| GCC-modstykke | .gch-filendelse (GCC prækompilerede headere bruger ikke .pch) |
| Versionsdetektering | MSVC indlejrer intern signatur; afviser forældede PCH-filer ved uoverensstemmelse i version eller flag |
| C++20-efterfølger | C++20 Modules (.ifc i MSVC) erstatter delvist PCH i nye kodebaser |
| Associeret OS | Windows (MSVC), macOS (Xcode og Clang), Linux (Clang og GCC) |
| Udgivet | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Seneste version | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Specifikation | learn.microsoft.com |
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om PCH-filer.