C++ 预编译头文件大小巨大

Urs*_*nut 5 c++ precompiled-headers

我有两个关于 C++ 预编译头功能的问题。

1.当您创建 .gch 文件(使用 GCC)时实际上发生了什么,它包含什么?

2.为什么这些文件的大小如此之大,但最终的可执行文件却如此之小。

Que*_*tin 6

当您预编译标头时,一切都像通常的编译一样开始:

  • 预处理器运行,包括任何相关标头并执行宏替换
  • 生成的源代码将移交给编译器,编译器对其进行解析并验证语法
  • 然后编译器生成 AST,即编码代码语义的数据结构

通常,这是在.cpp文件上完成的,然后继续实际编译 AST 并生成可执行代码。但是,标头预编译会在此停止,编译器会将 AST 转储到文件内.gch

在进一步使用此预编译头时,编译器可以直接从文件加载 AST 并从那里获取它,从而跳过上面列出的昂贵处理。

.gch文件很大,因为它包含原始标头中隐含的大量信息。但它与最终可执行文件的大小无关——使用和不使用预编译头进行编译应该产生完全相同的结果。