C/C++ 优化工具

这篇博客将简要概述分析 C 和 C++ 应用程序,向你展示所有可用的工具,目的是帮助你选对工具。

步骤分析

在查看工具之前,让我们回顾一下分析步骤。这非常重要。 评估在你的项目中,哪些是比较重要的。 是CPU使用率?是内存占用?是电池使用?还是帧率提高?可以有很多项。

  1. 首先,你要评估什么对你的项目是重要的。你想测量什么?
  2. 然后,你要决定你可以用哪些工具来做这些测量。有许多不同的工具,它们都涵盖了许多可能的测量事项。
  3. 选择工具后,您应该编写基准测试。这意味着在你的应用程序中,有一个可靠的方法来测量一些东西。 如果你必须启动应用程序,点击这里,点击那里,加载文件,等待下载内容…… 你不可能连续执行三次获得相同的测量结果。 如果你写一些自动化测试,比如单元测试,会更好。
  4. 在对代码做任何修改之前,使用一种工具运行基准测试并通过测量基准测试建立基线。
  5. 第五步,终于可以改代码了。请记住,在第五步之前,不要改代码。 改代码后,测量结果,将其与基线进行比较,判断改进是否有效。

然后,重复到第4步,剖析,重复第5步,再次做出改变,如此循环。

工具使用

为了选择最适合的工具,必须了解所有可用的工具以及何时使用它们。

用于优化性能

让我们首先谈谈性能的优化。

VTune

要衡量性能,可以使用英特尔的 VTune。 它是一个非常强大的工具,有一个非常漂亮的用户界面。 VTune 可用于 Linux 和 Windows,如果你把它作为 Intel System Studio 的一部分下载,则是免费的。 不要单独寻找 VTune,而是作为 Intel System Studio 工具套件的一部分。 它实际上是免费使用的——即使是商业用途。 但是,VTune有一个限制——它需要英特尔硬件,这意味着,如果你有嵌入式板,则无法在 AMD CPU 或 ARM 上使用它。 除了这个限制之外,它是一个非常好的工具。

Perf

另一个可以用来测量性能的工具是 perf,它是 Linux 内核的一部分。 这意味着它支持 Linux 内核的所有架构,包括 x86、ARM、PPC 等等。 不幸的是,perf 没有用户界面。它是一个命令行工具,相当难用 【译者注:Github 上有开源的可视化工具 FlameGraph】。 KDAB 写了一个叫 Hotspot 的工具,它有一个用于 perf 测量的图形界面。

可以在 Github 上找到 Hotspot。 它是一个开源的应用程序,可以免费使用。 它的目标是易于使用,涵盖了大多数常见的用例,包括观察应用程序使用的 CPU 时间并找出谁在使用这些时间。 它还支持测量非 CPU 时间,也就是说,当应用程序处于睡眠状态或等待某些事情发生时的时间。 点击 视频 观看 Hotspot 的完整演示。

用于优化内存

然后,你可能想优化的是内存分配——不仅仅是内存泄漏,还有应用程序运行时对内存的使用。

Valgrind Massif

如果应用程序在运行时使用了太多的内存,你可能需要使用不同的工具来查明这些分配发生的位置。 有一个工具可以做到这一点,它就是 Valgrind Massif。它能很好地完成这项工作,但真的很慢。

Heaptrack

另一种方法是使用 Heaptrack,这是一个开源的工具,是 KDE 的一部分。它是由 Milian Wolff 开发的。 Heaptrack 能够定位应用程序运行时的所有内存分配。 然后,它将显示内存分配的图表,包括临时分配。

当然,这可能是你想要的,但也可能是需要优化的东西。 它可以告诉你,对于不同的内存大小,你是经常分配小内存还是大内存。 当然,你可以把应用程序的软件内存和你的代码联系起来,找出是哪一段代码在执行。 它比 Valgrind Massif 快很多。

Heaptrack 优于 Valgrind 的另一点是,你可以把 Heaptrack 附加到正在运行的程序上。 如果你只想测量一个操作,而不是应用程序的整个设置,这就相当有用。 它还可以向你显示工具运行之间的差异。 你可以测量基线,测量变化,Heaptrack 将只显示两者之间的差异,这样你就可以计算出你的改进程度。

关于Heaptrack的完整演示,请看这个 视频

其他

参阅 分析与调试视频