2017-02-10 33 views
2

我有2个关于C++预编译头文件功能的问题。C++预编译头文件大小很大

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

2.为什么这些文件的大小很大,但最终的可执行文件非常小。

回答

2

当预编译的报头,这一切开始等的通常的编译:

  • 预处理器运行时,包括任何依赖的报头并执行宏替换
  • 将所得的源代码是弯到编译器,其分析它并验证语法
  • 然后编译器产生的AST,其编码语义代码
的数据结构

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

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

.gch文件非常庞大,因为它包含了很多隐含在原始标题中的信息。但它与最终可执行文件的大小没有关系 - 编译时使用和不使用预编译头文件应该会产生完全相同的结果。