我使用valgrind / callgrind来配置我的服务器代码进行一些优化. callgrind向我报告的两个最常用的调用(使用kcachegrind来查看)是_dl_lookup_symbol_x和do_lookup_x.然而,我不知道这些是什么,似乎没有找到关于它们的任何文档.
任何人都可以告诉我这两个功能的使用以及他们在做什么?
解决方法
_dl_lookup_symbol_x是glibc C运行时库中的内部函数.如果您的
browse是glibc的来源,您将在_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被多次调用是正常的,因为运行时计算出具有给定名称的共享库函数的地址.如果您正在剖析一个非常短暂的程序,那么您会发现大部分时间都花在内部“内务”功能中,而不是您自己的代码,这并不奇怪.