如何解释gprof输出

How to interprete gprof output

本文关键字:gprof 输出 解释 何解释      更新时间:2023-10-16

我刚刚用gprof分析了我的程序,得到了这个:

100.01      0.01     0.01    23118     0.43     0.43  std::vector<int, std::allocator<int> >::operator=(std::vector<int, std::allocator<int> > const&)

这让我很困惑,因为它说它使用了100.01%的时间使用=操作符。我猜对了吗,这意味着它只是复制数据一直,有多少内存的限制,一个程序被允许使用?

看起来您的运行时间太短,无法获得任何有用的数据。

gprof的工作方式是,它周期性地中断你的代码,看看你在那一刻在什么函数。如果代码运行的时间不长,它可能只收集少量的数据点。相比之下,callgrind检测您的代码并跟踪每个函数调用和返回,并检查钩子之间花费的时间。这给了它一个更全面的观点,即使运行时间很短。这有一个缺点,它减慢了程序的速度。

callgrind的另一个优点是可以停止、启动和保存其数据采集。因此,如果您不想监视程序的启动,或者只想捕获程序执行特定操作的时间,您可以这样做。此外,还有一个名为kcachegrind的工具,它可以为您提供收集数据的出色图形视图。

如果你能容忍你的程序在运行测试时减慢四倍的速度,那就用callgrind代替——它是valgrind的一部分。

如果您使用的是Linux,您的发行版可能有一个valgrind包和一个包含kcachegrind的包(它可能被称为kdesdk或其他东西)。花时间学习如何使用它们是值得的(它们不像gprof那样容易上手)。我想你会发现kcachegrind的GUI令人印象深刻(看看这个截图)。而且,顾名思义,它还可以分析cachegrind输出。