Was ist das PCH-Dateiformat?
Eine .pch-Datei ist ein vorkompilierter Header - ein binärer Compiler-Cache, der automatisch während des Build-Prozesses generiert wird. Anstatt große Header-Dateien wie das Windows SDK oder stdafx.h bei jeder Kompiliereinheit neu zu analysieren, serialisiert der Compiler seinen internen Zustand - Symboltabellen, AST-Knoten, Makrodefinitionen, Include-Guard-Flags - in einen .pch-Snapshot. Nachfolgende Kompiliereinheiten laden diesen Snapshot direkt, was die Build-Zeiten für große C- und C++-Projekte drastisch verkürzt.
MSVC erzeugt .pch-Dateien über das Compiler-Flag /Yc, typischerweise aus einer dedizierten Stub-Quelldatei namens pch.cpp oder stdafx.cpp. Clang speichert seine vorkompilierten Header als komprimierten LLVM-Bitstream, der in einer nativen Objektdatei in einer Sektion namens __clangast eingebettet ist. Das Äquivalent von GCC verwendet die Erweiterung .gch anstelle von .pch.
Das Format ist vollständig compiler-intern - proprietär, binär und nicht zwischen Maschinen übertragbar. Eine .pch-Datei wird ungültig, sobald sich die Compiler-Version, die Compiler-Flags oder ein enthaltene Header ändert; das Build-System generiert sie dann automatisch neu. Typische Größen liegen zwischen 10 MB und über 200 MB, wenn die Windows SDK-Header enthalten sind.
Benutzer erstellen oder öffnen .pch-Dateien niemals manuell. Das Löschen ist sicher - der nächste Build erstellt sie neu, und ein sauberer Rebuild ist die Standardlösung für hartnäckige PCH-bezogene Fehler. C++20 Modules reduzieren teilweise die Abhängigkeit von vorkompilierten Headern in neuen Codebasen, aber .pch bleibt der dominierende Mechanismus zur Beschleunigung der Kompilierung in bestehenden C- und C++-Projekten.
Sicherheit
RISIKO: LOWEin .pch ist ein internes Build-Artefakt des Compilers. Er kann keinen Code ausführen und wird nicht vom Betriebssystem ausgeführt. Kein nennenswerter Angriffsvektor; die Datei wird lokal vom Build-System generiert und ist maschinenspezifisch.
Formatdetails
kurz gefasst- Apple Xcode Prefix Header - Xcode (vor Swift) verwendete einen .pch Prefix-Header (Quelldatei, nicht binär), um Objective-C-Header vorzukompilieren; das Konzept ist das gleiche, aber die Datei ist ein Text-Header, nicht die binäre Ausgabe.
Programme zum Öffnen von PCH-Dateien
Technische Details
technische Spezifikation| Dateityp | Binärer Compiler-Cache (serialisierter AST- und Symbolzustand) |
| Kodierung | Binär (compiler-interne Repräsentation) |
| Byte-Reihenfolge | Little-endian (MSVC auf x86/x64); zielabhängig (Clang) |
| Container | Proprietärer binärer Blob (MSVC); COFF/ELF/Mach-O Objektdatei mit eingebetteter __clangast Sektion (Clang) |
| Kompression | Keine (MSVC); komprimierter LLVM-Bitstream, zlib-basiert (Clang) |
| Typische Größe | 10 MB - 200 MB; Windows SDK PCH üblicherweise 50-200 MB |
| MSVC-Generierungsflag | /Yc erstellt den PCH; /Yu verwendet ihn in nachfolgenden Kompiliereinheiten |
| Standard-Quelldatei | stdafx.cpp oder pch.cpp in MSVC-Projekten |
| Maschinenspezifität | Nicht zwischen Maschinen übertragbar; MSVC PCH enthält hostspezifische Adressinformationen |
| Invalidierung | Wird automatisch neu generiert, wenn Compiler-Version, Flags oder enthaltene Header sich ändern |
| GCC-Äquivalent | .gch Erweiterung (GCC Precompiled Headers verwenden kein .pch) |
| Versionserkennung | MSVC bettet interne Signatur ein; lehnt veraltete PCH-Dateien bei Versions- oder Flag-Konflikten ab |
| C++20-Nachfolger | C++20 Modules (.ifc in MSVC) ersetzen PCH teilweise in neuen Codebasen |
| Zugehöriges OS | Windows (MSVC), macOS (Xcode und Clang), Linux (Clang und GCC) |
| Veröffentlicht | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Neueste Version | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Spezifikation | learn.microsoft.com |
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu PCH-Dateien.