我正在使用 valgrind/callgrind 来分析我的服务器代码以进行一些优化。 callgrind 向我报告的两个最常用的调用(使用 kcachegrind 查看)是 _dl_lookup_symbol_x 和 do_lookup_x。但是我不知道它们是什么,并且似乎找不到有关它们的任何文档。
谁能告诉我这两个函数在哪里使用以及它们的作用吗?
_dl_lookup_symbol_x
是 glibc C 运行时库内的内部函数。如果你browse http://fossies.org/dox/glibc-2.16.0/dl-lookup_8c_source.htmlglibc 的来源,你会在上面找到这个评论_dl_lookup_symbol_x
定义:
/* Search loaded objects' symbol tables for a definition of the symbol
UNDEF_NAME, perhaps with a requested version for the symbol.
do_lookup_x
只是一个在内部调用的辅助函数_dl_lookup_symbol_x
功能。
我不是 glibc 内部的专家,但据我所知,_dl_lookup_symbol_x
在程序加载的共享库中查找符号(例如函数)。
我不知道为什么这些函数在您的分析中被如此频繁地调用,但至少现在您对它们的作用有了一些线索。您的分析应该告诉您哪些函数负责调用_dl_lookup_symbol_x
很经常。
请注意,这将是正常的_dl_lookup_symbol_x
当程序第一次启动时被调用多次,因为运行时计算出具有给定名称的共享库函数的地址。如果您正在分析一个生命周期非常短的程序,那么您会发现大部分时间都花在内部“内务处理”函数而不是您自己的代码上,这并不奇怪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)