¿Qué es el formato de archivo PCH?
Un archivo .pch es una cabecera precompilada: una caché binaria del compilador generada automáticamente durante el proceso de compilación. En lugar de volver a analizar archivos de cabecera extensos como el Windows SDK o stdafx.h en cada unidad de compilación, el compilador serializa su estado interno (tablas de símbolos, nodos AST, definiciones de macros, indicadores de protección de inclusión) en una instantánea .pch. Las unidades de compilación posteriores cargan esa instantánea directamente, reduciendo drásticamente los tiempos de compilación para proyectos grandes de C y C++.
MSVC produce archivos .pch mediante el modificador de compilador /Yc, normalmente a partir de un archivo de código fuente dedicado llamado pch.cpp o stdafx.cpp. Clang almacena sus cabeceras precompiladas como un flujo de bits LLVM comprimido incrustado dentro de un archivo de objeto nativo en una sección llamada __clangast. El equivalente de GCC utiliza la extensión .gch en lugar de .pch.
El formato es totalmente interno del compilador: propietario, binario y no transferible entre máquinas. Un archivo .pch se invalida siempre que cambia la versión del compilador, los modificadores de compilación o cualquier cabecera incluida; el sistema de compilación lo regenera automáticamente. Los tamaños típicos oscilan entre 10 MB y más de 200 MB cuando se incluyen las cabeceras del Windows SDK.
Los usuarios nunca crean ni abren archivos .pch manualmente. Borrarlos es seguro: la siguiente compilación lo recreará, y una reconstrucción limpia es el remedio estándar para errores persistentes relacionados con PCH. Los Módulos de C++20 reducen parcialmente la dependencia de las cabeceras precompiladas en nuevas bases de código, pero .pch sigue siendo el mecanismo dominante de velocidad de compilación en proyectos existentes de C y C++.
Seguridad y protección
RIESGO: LOWUn .pch es un artefacto de compilación interno del compilador. No puede ejecutar código y no es ejecutado por el SO. No hay un vector de ataque significativo; el archivo se genera localmente por el sistema de compilación y es específico de la máquina.
Detalles del formato
en pocas palabras- Apple Xcode Prefix Header - Xcode (antes de Swift) utilizaba una cabecera de prefijo .pch (archivo fuente, no binario) para precompilar cabeceras de Objective-C; el concepto es el mismo pero el archivo es una cabecera de texto, no la salida binaria.
Programas que abren archivos PCH
Detalles técnicos
especificación profunda| Tipo de archivo | Caché binaria del compilador (AST serializado y estado de símbolos) |
| Codificación | Binario (representación interna del compilador) |
| Orden de bytes | Little-endian (MSVC en x86/x64); dependiente del objetivo (Clang) |
| Contenedor | Blob binario propietario (MSVC); archivo de objeto COFF/ELF/Mach-O con sección __clangast incrustada (Clang) |
| Compresión | Ninguna (MSVC); flujo de bits LLVM comprimido, basado en zlib (Clang) |
| Tamaño típico | 10 MB - 200 MB; el PCH del Windows SDK suele tener entre 50-200 MB |
| Modificador de generación MSVC | /Yc crea el PCH; /Yu lo consume en unidades de compilación posteriores |
| Archivo fuente predeterminado | stdafx.cpp o pch.cpp en proyectos de MSVC |
| Especificidad de máquina | No transferible entre máquinas; el PCH de MSVC incluye información de direcciones específica del host |
| Invalidación | Se regenera automáticamente cuando cambia la versión del compilador, los modificadores o cualquier cabecera incluida |
| Equivalente en GCC | Extensión .gch (las cabeceras precompiladas de GCC no usan .pch) |
| Detección de versión | MSVC incrusta una firma interna; rechaza archivos PCH obsoletos si hay discrepancia de versión o modificadores |
| Sucesor en C++20 | Los Módulos de C++20 (.ifc en MSVC) reemplazan parcialmente al PCH en nuevas bases de código |
| SO asociado | Windows (MSVC), macOS (Xcode y Clang), Linux (Clang y GCC) |
| Lanzado | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Última versión | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Especificación | learn.microsoft.com |
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos PCH.