找出减慢C程序速度的工具?

时间:2012-06-08 04:55:19

标签: c performance time

我有一个由几个.h和.c文件和许多函数组成的程序。还有一些功能可以调用其他功能等。 现在,这实际上是一项任务,所以我知道该计划需要多长时间才能达到目的。

问题是,与我给出的时间相比,我的程序花费了太多时间。 是否有可能找出哪个函数花费了太多时间或者代码的哪个部分正在按下程序?


我没有在这里给出代码,因为它太长了。我知道没有人能回答为什么“我的节目”很慢但我说话一般! 是否有工具可以衡量每个功能需要多长时间或类似的功能? 我正在使用gcc而且我在Linux上。

2 个答案:

答案 0 :(得分:9)

由于您使用的是Linux,因此您可能已经安装了gprof探查器。 gprof的最基本用法是使用-pg选项进行编译(获取信息输出也需要-g选项)。 e.g。

> gcc -g -pg -o my_executable my_file.c

现在,您可以正常运行程序。然后你运行

> gprof my_executable > profile.txt

将分析信息输出到profile.txt。这些数据看起来有点像

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 33.34      0.02     0.02     7208     0.00     0.00  open
 16.67      0.03     0.01      244     0.04     0.12  offtime
 16.67      0.04     0.01        8     1.25     1.25  memccpy
 16.67      0.05     0.01        7     1.43     1.43  write
 16.67      0.06     0.01                             mcount
  0.00      0.06     0.00      236     0.00     0.00  tzset
  0.00      0.06     0.00      192     0.00     0.00  tolower
  0.00      0.06     0.00       47     0.00     0.00  strlen
  0.00      0.06     0.00       45     0.00     0.00  strchr
  0.00      0.06     0.00        1     0.00    50.00  main
  0.00      0.06     0.00        1     0.00     0.00  memcpy
  0.00      0.06     0.00        1     0.00    10.11  print
  0.00      0.06     0.00        1     0.00     0.00  profil
  0.00      0.06     0.00        1     0.00    50.00  report

[...]

并且您可以读取有关每个函数的一些数据(例如,open被称为7208次,而执行它的时间为0.02。)。这个示例数据是从this guide借来的,您应该阅读它,因为它提供了更多的解释,并描述了如何操纵分析以获得逐行分析等内容。

答案 1 :(得分:1)

正如上面的dbaupp所建议的,gprof是一个很好的linux工具。除此之外,如果您有权访问IBM Rational Quantify,也可以尝试访问{{3}}。它是一种商业工具,但提供了功能的良好图形视图,需要更多时间和呼叫流程等。

相关问题