13

我如何找出编译器花费时间的地方?

我的构建太慢了,我已经为 VC++ 临时文件使用了 RAMdisk,它没有任何区别。(我有一个 SSD,所以我预计没有区别。)

该项目中的大多数单个 C++ 文件大约需要 . 2 秒编译,这看起来很糟糕(因为我也没有任何项目内并行化,因为我使用的是 VS2005)。

我该如何优化呢?不要在没有分析的情况下进行优化,但是如何分析编译器?

注意:这些并没有真正的帮助:


让我们添加一个很好的评论:你有很多模板吗?您的文件平均有多大?您是否检查过仅包含最少的必要标题

不,我没有。我当然可以(并且pro'lly会)。我也许能找到一些东西,但这都是猜测反复试验

“大家”告诉你,你应该只在测量/分析之后进行优化,但是在优化编译时间时,我们又回到了试错?


注意:评论中建议的“hack”__TIME__不起作用,至少在 Visual-C++ 上不起作用,因为(如文档所述):当前源文件最新编译时间。时间是 hh:mm:ss 形式的字符串文字。——我想至少可以用这个标记获得单个编译单元的计时,但它无助于深入研究一个编译单元。

4

3 回答 3

2

SysInternals ProcMon 将向您显示所选进程完成的所有 I/O,包括发生时的时间戳和完整路径。

于 2013-03-14T10:16:22.040 回答
2

有几种方法可以优化编译时间:

  • 使用预编译的头文件。如果您使用 Visual C++,则使用“stdafx.h”。默认情况下,“stdafx.h”设置为预编译头文件,但我建议您检查它以确保它是。

  • 使用 Linux :)。如果您不必使用 Windows 来完成您的工作,我建议您使用 Linux。它的编译时间要好得多。一些原因是: ext4 平均比 NTFS 快约 40%,并且它具有更好的进程调度程序。在处理器操作方面,Linux 通常会快 x1.8 - x2 倍,并且编译取决于处理器。

  • 使用另一个编译器。众所周知,Clang/LLVM 具有更好的编译速度,并且还支持预编译头文件。

于 2013-03-14T10:47:18.670 回答
0

TL;DR:使用 MS vcperf分析您的构建。

注意:这个问题来自 2013 年,工具来自 2019 年,所以,是的,这里有一些等待。:-)

MS 发布了vcperf,它建立在他们的C++ Build Insights之上,它基本上是一个允许您分析编译过程的工具链。

https://devblogs.microsoft.com/cppblog/introducing-c-build-insights/

C++ Build Insights 使用了 vcperf,该工具允许您捕获构建的跟踪并在 Windows 性能分析器 (WPA) 中查看它。

于 2021-03-09T10:25:41.730 回答