【问题标题】:Is it possible to reduce my compile time when using many types?使用多种类型时是否可以减少我的编译时间?
【发布时间】:2012-02-06 00:21:45
【问题描述】:

让我们坚持一个文件和一个标题。我生成了一个包含大量信息的标头,并制作了该标头的简化版本,并删除了许多方法。标头从 6k 行变为 3k。

这是一个类在 light header 中的外观示例

class SomeClass : public MACRO_FOR_KEYWORD TheBase {
    virtual void i_dont_filter_this_out(){}
public:
    deque<Var*> ls;
    inline SomeClass(){}
    inline virtual ~SomeClass(){}
    inline SomeClass(deque<Var*> ls_)
    {
        ls = ls_;
    }
};

我尝试编译同一个文件,结果从 8 秒缩短到 7 秒...不是我希望的结果。

我在想可能大部分的编译时间是因为我定义了这么多类,而方法并不重要。但我需要所有这些类存在。大约有280个班级。我觉得不会很多。

我可以做些什么来减少我的编译时间?我应该打扰吗?每个文件大约需要 9 秒,而链接又需要几秒钟。我想我除了获得更快的 CPU 什么都做不了?

注意:我使用的是视觉工作室。

【问题讨论】:

标签: c++ visual-c++ compile-time


【解决方案1】:

您可以导出您的定义——当然,假设您在其他地方包含此标题。当您查看较大的项目或像 boost 这样的库时,280 个类是相当小的。这些类是否都属于一起 - 还是不能将它们分成更小的组以减少依赖性和编译时间?为什么你应该偏爱一个轻量级的标题(带有冗余声明?)而不是像统一构建这样的方法?

【讨论】:

  • light 文件原来并不重要,所以我不会费心使用它。好在我没有花太多时间在它上面(它实际上是我更大的标题,带有删除行的通行证包含某些字符串)。我知道删除一些标准头(cassert、cstdio)并使用 iosfwd 而不是 i 和 o 流它又下降了一秒钟。奇怪的是,这些文件需要几秒钟才能编译。我需要大量处理这些文件(它们很大)
  • @acidzombie24 好的 - 光文件可能最终难以维护和保持同步。也许您可以重新考虑如何使用 PCH 文件?尽管如此,如果依赖关系微不足道,3KSLOC == 7 秒还是很慢的。
  • 我也在使用 gcc,但我还没有在 gcc 上测试过,我应该知道。我只知道我的构建确实有效,只是不知道多久。有趣的是,重建只需 45 秒。也许它实际上是链接器。好的,我尝试构建一个空白文件,大约需要 1-2 秒。我猜双端队列(我需要)+ 标题大约是 3-4 秒 + 2linker + 1 秒用于正文。那还不错。当我需要做很多小事情时,仍然需要 7-8 秒的构建有点烦人。 -edit- +1
  • 嗯——听起来还是很慢。如果它继续困扰您,请尝试在 silico 中发布(上图)的构建时间链接。您可以采取很多方向来优化构建时间 - 我现在只能提供盲目的建议/概括。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多