Vad är filformatet PCH?
En .pch-fil är en förkompilerad header - en binär kompilator-cache som genereras automatiskt under byggprocessen. Istället för att analysera om stora header-filer som Windows SDK eller stdafx.h vid varje kompileringsenhet, serialiserar kompilatorn sitt interna tillstånd - symboltabeller, AST-noder, makrodefinitioner, include-guard-flaggor - till en .pch-ögonblicksbild. Efterföljande kompileringsenheter läser in den ögonblicksbilden direkt, vilket minskar byggtiderna dramatiskt för stora C- och C++-projekt.
MSVC producerar .pch-filer via kompilatorflaggan /Yc, vanligtvis från en dedikerad källfil vid namn pch.cpp eller stdafx.cpp. Clang lagrar sina förkompilerade headers som en komprimerad LLVM-bitström inbäddad i en infödd objektfil i en sektion kallad __clangast. GCC:s motsvarighet använder filändelsen .gch snarare än .pch.
Formatet är helt internt för kompilatorn - proprietärt, binärt och kan inte överföras mellan maskiner. En .pch-fil ogiltigförklaras när kompilatorversionen, kompilatorflaggor eller någon inkluderad header ändras; byggsystemet återskapar den automatiskt. Typiska storlekar varierar från 10 MB till över 200 MB när Windows SDK-headers inkluderas.
Användare skapar eller öppnar aldrig .pch-filer manuellt. Det är säkert att radera dem - nästa bygge återskapar filen, och en ren ombyggnad («clean rebuild») är standardåtgärden för ihållande PCH-relaterade fel. C++20 Modules minskar delvis beroendet av förkompilerade headers i nya kodbaser, men .pch förblir den dominerande mekanismen för kompileringshastighet i befintliga C- och C++-projekt.
Säkerhet & trygghet
RISK: LOWEn .pch är en intern byggartefakt från kompilatorn. Den kan inte köra kod och exekveras inte av operativsystemet. Ingen meningsfull attackvektor finns; filen genereras lokalt av byggsystemet och är maskinspecifik.
Formatdetaljer
i ett nötskal- Apple Xcode Prefix Header - Xcode (före Swift) använde en .pch prefix-header (källfil, inte binär) för att förkompilera Objective-C-headers; konceptet är detsamma men filen är en text-header, inte den binära utdatan.
Program som öppnar PCH-filer
Tekniska detaljer
djup specifikation| Filtyp | Binär kompilator-cache (serialiserad AST och symboltillstånd) |
| Kodning | Binär (kompilator-intern representation) |
| Byteordning | Little-endian (MSVC på x86/x64); målsystemsberoende (Clang) |
| Container | Proprietary binär blob (MSVC); COFF/ELF/Mach-O objektfil med inbäddad __clangast-sektion (Clang) |
| Komprimering | Ingen (MSVC); komprimerad LLVM-bitström, zlib-baserad (Clang) |
| Typisk storlek | 10 MB - 200 MB; Windows SDK PCH är vanligtvis 50-200 MB |
| MSVC-genereringsflagga | /Yc skapar PCH; /Yu använder den i efterföljande kompileringsenheter |
| Standardkällfil | stdafx.cpp eller pch.cpp i MSVC-projekt |
| Maskinspecifik | Kan inte överföras mellan maskiner; MSVC PCH innehåller värdspecifik adressinformation |
| Ogiltigförklaring | Återskapas automatiskt när kompilatorversion, flaggor eller inkluderade headers ändras |
| GCC-motsvarighet | .gch-filändelse (GCC:s förkompilerade headers använder inte .pch) |
| Versionsdetektering | MSVC bäddar in en intern signatur; avvisar inaktuella PCH-filer vid versions- eller flaggfel |
| C++20-efterföljare | C++20 Modules (.ifc i MSVC) ersätter delvis PCH i nya kodbaser |
| Associerat OS | Windows (MSVC), macOS (Xcode och Clang), Linux (Clang och GCC) |
| Släppt | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Senaste version | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Specifikation | learn.microsoft.com |
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om PCH-filer.