O que é o formato de ficheiro PCH?
Um arquivo .pch é um cabeçalho pré-compilado - um cache binário do compilador gerado automaticamente durante o processo de build. Em vez de analisar novamente arquivos de cabeçalho grandes, como o Windows SDK ou stdafx.h, em cada unidade de compilação, o compilador serializa seu estado interno - tabelas de símbolos, nós AST, definições de macro, sinalizadores de include-guard - em um instantâneo .pch. As unidades de compilação subsequentes carregam esse instantâneo diretamente, reduzindo drasticamente os tempos de build para grandes projetos C e C++.
O MSVC produz arquivos .pch por meio da flag de compilador /Yc, normalmente a partir de um arquivo de origem stub dedicado chamado pch.cpp ou stdafx.cpp. O Clang armazena seus cabeçalhos pré-compilados como um bitstream LLVM compactado incorporado dentro de um arquivo de objeto nativo em uma seção chamada __clangast. O equivalente do GCC usa a extensão .gch em vez de .pch.
O formato é inteiramente interno do compilador - proprietário, binário e não transferível entre máquinas. Um arquivo .pch é invalidado sempre que a versão do compilador, as flags do compilador ou qualquer cabeçalho incluído mudam; o sistema de build o regenera automaticamente. Os tamanhos típicos variam de 10 MB a mais de 200 MB quando os cabeçalhos do Windows SDK estão incluídos.
Os usuários nunca criam ou abrem arquivos .pch manualmente. Excluir um é seguro - o próximo build o recria, e um clean rebuild é o remédio padrão para erros persistentes relacionados ao PCH. Os Módulos C++20 reduzem parcialmente a dependência de cabeçalhos pré-compilados em novas bases de código, mas o .pch continua sendo o mecanismo dominante de velocidade de compilação em projetos C e C++ existentes.
Segurança e proteção
RISCO: LOWUm .pch é um artefato interno de build do compilador. Ele não pode executar código e não é executado pelo SO. Nenhum vetor de ataque significativo; o arquivo é gerado localmente pelo sistema de build e é específico da máquina.
Detalhes do formato
em resumo- Apple Xcode Prefix Header - O Xcode (pré-Swift) usava um prefix header .pch (arquivo fonte, não binário) para pré-compilar cabeçalhos Objective-C; o conceito é o mesmo, mas o arquivo é um cabeçalho de texto, não a saída binária.
Programas que abrem arquivos PCH
Detalhes técnicos
especificação profunda| Tipo de arquivo | Cache binário do compilador (AST serializada e estado de símbolos) |
| Codificação | Binário (representação interna do compilador) |
| Ordem dos bytes | Little-endian (MSVC em x86/x64); dependente do alvo (Clang) |
| Contêiner | Blob binário proprietário (MSVC); arquivo de objeto COFF/ELF/Mach-O com seção __clangast incorporada (Clang) |
| Compressão | Nenhuma (MSVC); bitstream LLVM compactado, baseado em zlib (Clang) |
| Tamanho típico | 10 MB - 200 MB; PCH do Windows SDK comumente 50-200 MB |
| Flag de geração MSVC | /Yc cria o PCH; /Yu o consome em unidades de compilação subsequentes |
| Arquivo fonte padrão | stdafx.cpp ou pch.cpp em projetos MSVC |
| Especificidade da máquina | Não transferível entre máquinas; o PCH do MSVC inclui informações de endereço específicas do host |
| Invalidação | Regenerado automaticamente quando a versão do compilador, flags ou qualquer cabeçalho incluído muda |
| Equivalente GCC | Extensão .gch (cabeçalhos pré-compilados do GCC não usam .pch) |
| Detecção de versão | O MSVC incorpora uma assinatura interna; rejeita arquivos PCH obsoletos em caso de incompatibilidade de versão ou flag |
| Sucessor C++20 | Módulos C++20 (.ifc no MSVC) substituem parcialmente o PCH em novas bases de código |
| SO associado | Windows (MSVC), macOS (Xcode e Clang), Linux (Clang e GCC) |
| Lançado | 1988 (Microsoft C Compiler 6.0 for MS-DOS, first PCH implementation); mainstream adoption with MSVC for Windows in the 1990s |
| Versão mais recente | N/A - format is internal per compiler; MSVC PCH is regenerated by each compiler version |
| Especificação | learn.microsoft.com |
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos PCH.