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

Min*_*any 6 c performance time

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

问题是,与我给出的时间相比,我的程序花费了太多时间.是否有可能找出哪个函数花费了太多时间或者代码的哪个部分使程序停止运行?


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

huo*_*uon 9

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

> gcc -g -pg -o my_executable my_file.c
Run Code Online (Sandbox Code Playgroud)

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

> gprof my_executable > profile.txt
Run Code Online (Sandbox Code Playgroud)

这将输出分析信息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

[...]
Run Code Online (Sandbox Code Playgroud)

并且你可以读出关于每个函数的一些数据(例如,open被称为7208次,并且花了0.02s执行它.).这个示例数据来自本指南,您应该阅读它,因为它提供了更多的解释,并描述了如何操纵分析以获得逐行分析等内容.