【问题标题】:What do Visual Studio's precompiled headers contain?Visual Studio 的预编译头文件包含什么?
【发布时间】:2011-06-13 00:14:43
【问题描述】:

问题涉及由 Visual Studio 编译器创建的 .pch 二进制文件的内容。 它包含什么? 只是头文件的解析树,还是目标代码?

考虑这个例子:

// myheader.h
#include <vector>
class A {
public:
  void add(int i) { v.push_back(i); }
private:
  std::vector<int> v;
};

在要预编译的集合中包含此标头会导致矢量 的完整模板实例被编译并添加到 .pch 中吗?

提供更多上下文;如果只预编译解析树,这意味着实例化模板的目标代码仍将在每个编译单元创建一次,从而增加编译和链接时间。因此,即使启用了预编译头文件,“统一构建”/减少编译单元仍然是减少构建时间的一个相关因素。

【问题讨论】:

    标签: c++ visual-studio templates precompiled-headers


    【解决方案1】:

    虽然我不能肯定PCH的内部情况, 至于团结建设, 即使vector&lt;int&gt; 在 PCH 中完全实例化, 我认为统一构建仍然有一些优势。

    您可能知道,C++ 必须保持单一定义规则 (ODR)。 链接器必须将分散在每个目标文件中的模板定义统一到 一。
    也就是粗略来说,C++要做的事情如下:

    1. 实例化模板
    2. 写入目标文件
    3. 重新读取链接的目标文件
    4. 解决 ODR

    Unity 构建可以在一定程度上节省上述负载。
    但是,我不能说上述节省会超过非统一编译 在您的环境中使用 PCH 的系统。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多