我目前正在尝试分析和调试我正在使用的库的性能问题。出于这个原因,我写了一个简短的C++
代码,它将使用该库的一些核心功能并在其上运行一个简单的计时器。
为了更深入地潜水,我现在开始使用带有--tool=callgrind
选项的valgrind。我使用kcachegrind
可视化结果。我以前做过这个,并且(原则上)知道这是如何工作的。
但是,我很惊讶地看到这样的模式:
main
|
myfunc()
|
_dl_runtime_resolve_xsave
在此之后,调用图只是停止,即使我可以在列表中看到更多的低级函数。
我相信调用图的这种结构可能与使用多处理的库有关,我之前没有使用过valgrind。但是,使用谷歌,我无法找到这个特定函数调用的解释。
有人可以向我解释我在这里看到的内容,以及为什么调用图在这个函数调用时看似断开?
我认为当您将共享库加载到程序中时会调用那些“_dl_runtime_resolve *”函数。我通常会在每个库函数中看到其中一个函数,只调用一次或两次。我会忽略它们。