Hva er PCH-filformatet?
En .pch-fil er et forhåndskompilert hode (precompiled header) - en binær kompilator-cache generert automatisk under byggprosessen. I stedet for å analysere store header-filer som Windows SDK eller stdafx.h på nytt for hver kompileringsenhet, serialiserer kompilatoren sin interne tilstand - symboltabeller, AST-noder, makrodefinisjoner, include-guard-flagg - til et .pch-øyeblikksbilde. Påfølgende kompileringsenheter laster dette øyeblikksbildet direkte, noe som reduserer byggetiden dramatisk for store C- og C++-prosjekter.
MSVC produserer .pch-filer via kompilatorflagget /Yc, vanligvis fra en dedikert kildekodefil kalt pch.cpp eller stdafx.cpp. Clang lagrer sine forhåndskompilerte hoder som en komprimert LLVM-bitstrøm innebygd i en nativ objektfil i en seksjon kalt __clangast. GCCs ekvivalent bruker filendelsen .gch i stedet for .pch.
Formatet er utelukkende internt for kompilatoren - proprietært, binært og ikke overførbart mellom maskiner. En .pch-fil blir ugyldiggjort hver gang kompilatorversjonen, kompilatorflaggene eller en inkludert header endres; byggesystemet regenererer den automatisk. Typiske størrelser varierer fra 10 MB til over 200 MB når Windows SDK-headere er inkludert.
Brukere oppretter eller åpner aldri .pch-filer manuelt. Det er trygt å slette dem - neste bygg vil gjenopprette dem, og en ren gjenoppbygging (clean rebuild) er standardløsningen for vedvarende PCH-relaterte feil. C++20 Modules reduserer delvis avhengigheten av forhåndskompilerte hoder i nye kodebaser, men .pch forblir den dominerende mekanismen for kompileringshastighet i eksisterende C- og C++-prosjekter.
Sikkerhet og trygghet
RISIKO: LOWEn .pch er en intern bygg-artefakt fra kompilatoren. Den kan ikke kjøre kode og utføres ikke av operativsystemet. Ingen reell angrepsvektor; filen genereres lokalt av byggesystemet og er maskinspesifikk.
Formatdetaljer
i et nøtteskall- Apple Xcode Prefix Header - Xcode (før Swift) brukte en .pch prefix-header (kildekodefil, ikke binær) for å forhåndskompilere Objective-C-headere; konseptet er det samme, men filen er en tekst-header, ikke det binære resultatet.
Programmer som åpner PCH-filer
Tekniske detaljer
dyp spesifikasjon| Filtype | Binær kompilator-cache (serialisert AST og symboltilstand) |
| Koding | Binær (kompilator-intern representasjon) |
| Byterekkefølge | Little-endian (MSVC på x86/x64); målavhengig (Clang) |
| Beholder | Proprietær binær blob (MSVC); COFF/ELF/Mach-O objektfil med innebygd __clangast-seksjon (Clang) |
| Komprimering | Ingen (MSVC); komprimert LLVM-bitstrøm, zlib-basert (Clang) |
| Typisk størrelse | 10 MB - 200 MB; Windows SDK PCH er vanligvis 50-200 MB |
| MSVC-genereringsflagg | /Yc oppretter PCH; /Yu bruker den i påfølgende kompileringsenheter |
| Standard kildekodefil | stdafx.cpp eller pch.cpp i MSVC-prosjekter |
| Maskinspesifisitet | Ikke overførbar mellom maskiner; MSVC PCH inkluderer vertspesifikk adresseinformasjon |
| Ugyldiggjøring | Regenereres automatisk når kompilatorversjon, flagg eller inkluderte headere endres |
| GCC-ekvivalent | .gch-filendelse (GCC forhåndskompilerte hoder bruker ikke .pch) |
| Versjonsdeteksjon | MSVC bygger inn en intern signatur; avviser utdaterte PCH-filer ved avvik i versjon eller flagg |
| C++20-etterfølger | C++20 Modules (.ifc i MSVC) erstatter delvis PCH i nye kodebaser |
| Tilknyttet OS | Windows (MSVC), macOS (Xcode og Clang), Linux (Clang og GCC) |
| Utgitt | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Siste versjon | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Spesifikasjon | learn.microsoft.com |
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om PCH-filer.