该问题涉及Visual Studio编译器创建的.pch二进制文件的内容。 它包含什么? 它只是头文件的解析树,还是目标代码?
考虑这个例子:
// myheader.h
#include <vector>
class A {
public:
void add(int i) { v.push_back(i); }
private:
std::vector<int> v;
};
在预编译的集合中包含此标头会导致向量&lt; int&gt;的完整模板实例化。正在编译并添加到.pch?
提供更多背景信息;如果只预编译了解析树,这意味着每个编译单元仍然会创建一个实例化模板的目标代码,导致编译和链接时间增加。因此,即使启用了预编译头,“统一构建”/减少编译单元仍然是减少构建时间的相关因素。
答案 0 :(得分:1)
虽然我不能说PCH的内部,但
至于团结建设,
即使vector<int>
在PCH中完全实例化,
我认为团结构建仍然有一些优势。
您可能知道,C ++必须保持单一定义规则(ODR)。
链接器必须将分散在每个目标文件中的模板定义统一到
之一。
也就是说,粗略地说,C ++必须执行以下操作:
Unity构建可以在一定程度上节省上述负载 但是,我不能说上面的保存会超过非统一编译 在您的环境中使用PCH的系统。