我有一个C程序,我使用-g
选项编译,然后运行:
valgrind --tool=cachegrind --branch-sim=yes ./myexecutable
这让我知道哪个功能包含瓶颈。然而,这是一个非常长的函数,我不清楚函数的哪个部分我得到了大部分缓存缺失。我不能(不想)将它分成两个不同的部分。
是否有办法(可能包括valgrind.h
或某些神奇的#pragma
内容)来指示Valgrind为函数的不同部分制作不同的统计信息?
答案 0 :(得分:1)
要检查逐个函数的值,您可能使用过这样的cg_annotate:
cg_annotate cachegrind.out.1234
如果为该命令添加“--auto = yes”标志,则将显示每行的值:
cg_annotate --auto=yes cachegrind.out.1234
您可以将结果打印到文件中,以便搜索您的功能。请注意,只会显示对性能产生重大影响的行和函数,因此如果找不到某些行,则可能会对执行产生微不足道的影响。