如何解释gprof输出
How to interprete gprof output
我刚刚用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
输出。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 让gprof从Qt调试应用程序读取gmon.out输出时出现问题
- 如何解释gprof输出
- Gprof输出问题
- 被gprof输出弄糊涂了——调用太多