我正在使用google-perftools对我用C++编写并用g++ 4.5.2编译的程序进行概要分析。 pprof告诉我getaliasbyname_r()占用了CPU时间的56%! getaliasbyname_r()在做什么?为什么要花这么多CPU时间?有没有办法减轻这个问题?谢谢。
编译标志为:-O3 -DNDEBUG -Wall -Wno-deprecated -Wno-sign-compare。系统:ubuntu 11.04。

抱歉,您的问题未明确。我没有在代码中直接使用getaliasbyname_r()。在分析工具“pprof”生成的调用图中,我可以看到树“start-> _ libc_start_main-> main-> ...”约占cputime的44%。除了这棵大树之外,在调用图中还有另外一个iosated单节点树--- getaliasbyname_r。如图所示,它没有调用,也没有被任何其他函数调用。我用谷歌搜索了这个函数,并导致了http://linux.die.net/man/3/getaliasbyname_r。但这并没有太大帮助。我仍然不知道如何调用getaliasbyname_r()以及为什么要花费这么多的cputime。这个问题现在有意义吗?

回复阿德里安:谢谢您的答复。总运行时间约为28秒。探查器以100 /秒的速率采样。因此总共有大约2800个样本。 getaliasbyname_r()下降了大约1500,提出了我编写的函数(捕获了大约450个样本)。

最佳答案

如果您没有libc6的符号,通常会发生此问题。 getaliasbyname_r是从libc6导出的,但不是内部函数,许多内部函数由您的代码间接调用,并在二进制文件中的getaliasbyname_r之后出现。

因此,当探查器执行符号查找时,会将时间错误地分配给错误的函数。哎呀。

解决方法是先安装符号,然后重试。
http://randomascii.wordpress.com/2013/01/08/symbols-on-linux-part-one-g-library-symbols/

07-24 09:45
查看更多