我有 2 个关于 C++ 预编译 header 功能的问题。
1. 当您创建一个 .gch 文件(使用 GCC)时实际上发生了什么,它包含什么?
2.为什么这些文件这么大,但最终的可执行文件却这么小。
最佳答案
当你预编译一个头文件时,一切都像通常的编译一样开始:
- 运行预处理器,包括任何依赖的头文件并执行宏替换
- 生成的源代码被移交给编译器,编译器对其进行解析并验证语法
- 然后编译器生成 AST,一种对代码的语义进行编码的数据结构
通常,这是在 .cpp
文件上完成的,然后继续实际编译 AST 并生成可执行代码。但是, header 预编译就此停止,编译器将 AST 转储到 .gch
文件中。
在进一步使用这个预编译头文件时,编译器可以直接从文件中加载 AST 并从那里获取它,跳过上面列出的代价高昂的处理。
.gch
文件很大,因为它包含大量隐含在原始 header 中的信息。但它与最终可执行文件的大小无关——使用和不使用预编译头进行编译应该产生完全相同的结果。
关于巨大的 C++ 预编译 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157142/