`gprof在特定代码行中花费的时间
`gprof` time spent in particular lines of code
我一直将gprof
探查器与g++
结合使用。
我的代码中有一个函数,它封装了与主函数足够相关的行为的几个部分,因此将它们拆分为自己的函数是没有意义的。
我想知道在代码的每一个方面都花了多少时间。
所以,如果你想象代码看起来像
function(){
A
A
A
B
B
B
C
C
C
}
其中A、B和C表示我感兴趣的代码的特定部分,有没有办法让gprof
告诉我在这些特定部分上花了多少时间?
我知道这是个老问题,但我找到了一个有趣的答案。正如Sam所说,-l
选项仅适用于旧的gcc编译器。但我发现,如果你编译并链接到-pg -fprofile-arcs -ftest-coverage
,运行程序,gprof -l
的结果非常有趣。
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
13.86 0.26 0.26 main (ComAnalyste.c:450 @ 804b315)
10.87 0.46 0.20 main (ComAnalyste.c:386 @ 804b151)
7.07 0.59 0.13 main (ComAnalyste.c:437 @ 804b211)
6.25 0.70 0.12 main (ComAnalyste.c:436 @ 804b425)
4.89 0.79 0.09 main (ComAnalyste.c:283 @ 804a3f4)
4.89 0.88 0.09 main (ComAnalyste.c:436 @ 804b1e9)
4.08 0.96 0.08 main (ComAnalyste.c:388 @ 804ad95)
3.81 1.03 0.07 main (ComAnalyste.c:293 @ 804a510)
3.53 1.09 0.07 main (ComAnalyste.c:401 @ 804af04)
3.26 1.15 0.06 main (ComAnalyste.c:293 @ 804a4bf)
2.72 1.20 0.05 main (ComAnalyste.c:278 @ 804a48d)
2.72 1.25 0.05 main (ComAnalyste.c:389 @ 804adae)
2.72 1.30 0.05 main (ComAnalyste.c:406 @ 804aecb)
2.45 1.35 0.05 main (ComAnalyste.c:386 @ 804ad6d)
2.45 1.39 0.05 main (ComAnalyste.c:443 @ 804b248)
2.45 1.44 0.05 main (ComAnalyste.c:446 @ 804b2f4)
2.17 1.48 0.04 main (ComAnalyste.c:294 @ 804a4e4)
2.17 1.52 0.04 main (ComAnalyste.c:459 @ 804b43b)
1.63 1.55 0.03 main (ComAnalyste.c:442 @ 804b22d)
1.63 1.58 0.03 main (ComAnalyste.c:304 @ 804a56d)
1.09 1.60 0.02 main (ComAnalyste.c:278 @ 804a3b3)
1.09 1.62 0.02 main (ComAnalyste.c:285 @ 804a450)
1.09 1.64 0.02 main (ComAnalyste.c:286 @ 804a470)
1.09 1.66 0.02 main (ComAnalyste.c:302 @ 804acdf)
0.82 1.67 0.02 main (ComAnalyste.c:435 @ 804b1d2)
0.54 1.68 0.01 main (ComAnalyste.c:282 @ 804a3db)
0.54 1.69 0.01 main (ComAnalyste.c:302 @ 804a545)
0.54 1.70 0.01 main (ComAnalyste.c:307 @ 804a586)
0.54 1.71 0.01 main (ComAnalyste.c:367 @ 804ac1a)
0.54 1.72 0.01 main (ComAnalyste.c:395 @ 804ade6)
0.54 1.73 0.01 main (ComAnalyste.c:411 @ 804aff8)
0.54 1.74 0.01 main (ComAnalyste.c:425 @ 804b12a)
0.54 1.75 0.01 main (ComAnalyste.c:429 @ 804b19f)
0.54 1.76 0.01 main (ComAnalyste.c:444 @ 804b26f)
0.54 1.77 0.01 main (ComAnalyste.c:464 @ 804b4a1)
0.54 1.78 0.01 main (ComAnalyste.c:469 @ 804b570)
0.54 1.79 0.01 main (ComAnalyste.c:472 @ 804b5b9)
0.27 1.80 0.01 main (ComAnalyste.c:308 @ 804a5a3)
0.27 1.80 0.01 main (ComAnalyste.c:309 @ 804a5a9)
0.27 1.81 0.01 main (ComAnalyste.c:349 @ 804a974)
0.27 1.81 0.01 main (ComAnalyste.c:350 @ 804a99c)
0.27 1.82 0.01 main (ComAnalyste.c:402 @ 804af1d)
0.27 1.82 0.01 main (ComAnalyste.c:416 @ 804b073)
0.27 1.83 0.01 main (ComAnalyste.c:417 @ 804b0a1)
0.27 1.83 0.01 main (ComAnalyste.c:454 @ 804b3ec)
0.27 1.84 0.01 main (ComAnalyste.c:461 @ 804b44a)
0.27 1.84 0.01 main (ComAnalyste.c:462 @ 804b458)
据说每行花费的时间。这是一个非常有趣的结果。我不知道它的准确性或有效性,但它很有趣。希望对有帮助
这里有一个有用的资源:gprof逐行分析。
对于较旧版本的gcc编译器,gprof -l
参数指定了逐行分析。
但是,较新版本的gcc使用gcov
工具而不是gprof
来显示逐行分析信息。
如果您使用的是linux,那么您可以使用linux-perf而不是gprof,如下所述:
http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#linux_perf
键入perf report
并选择一个函数将使您能够逐行获得有关函数内部CPU时间的信息。
相关文章:
- 计算两个代码块的时间复杂度
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 如何减少代码的运行时间以对齐文本?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 给定C++代码的时间复杂度是多少?
- 代码厨师 2019 年 12 月午餐时间愚蠢的机器
- 以下递归代码的时间复杂度是多少?
- 如何使用跨平台代码在C++中设置系统时间?
- 此特定代码的时间复杂度是多少?
- C++代码的 C# 日期时间等效项是什么?
- 为什么我的代码在"decrease to zero"问题中被时间超过了
- 为什么这段代码需要这么长时间才能用 g++ 编译?
- 为什么超过此代码给出时间限制?
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 谁能帮我降低以下代码的时间复杂度?
- 需要减少我的C++代码的执行时间
- 在给定相同的输入的情况下,某些代码怎么可能花费更多时间来运行,这似乎只是因为它处于循环中?
- 标志以将IPDB和IOBJ文件从链接时间代码生成优化(LTCG)移动
- 如何使用CoreMidi转换Midi时间代码到实际时间
- vc++ 2010在使用链接时间代码生成时被破坏了吗?