C++ precompiled-headers 体积巨大

C++ precompiled-headers huge in size

我有 2 个关于 c++ precompiled-headers 功能的问题。

1.What 当你制作一个 .gch 文件(使用 GCC)时实际上发生了,它包含什么?

2.Why那些文件太大了,但最终的可执行文件太小了。

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

  • 预处理器是 运行,包括任何依赖 header 并执行宏替换
  • 生成的源代码被移交给编译器,编译器对其进行解析并验证语法
  • 然后编译器生成 AST,该数据结构对代码语义进行编码

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

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

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