valgrind/callgrind を使用してサーバー コードをプロファイリングし、最適化しています。callgrind が (kcachegrind を使用して表示して) 私に報告している最も使用されている 2 つの呼び出しは、_dl_lookup_symbol_x と do_lookup_x です。ただし、これらのいずれかが何であるかはわかりません。それらに関するドキュメントが見つからないようです。
これらの 2 つの関数がどこで使用され、何をするのか誰か教えてください。
_dl_lookup_symbol_x
glibc C ランタイム ライブラリ内の内部関数です。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
、ランタイムが指定された名前の共有ライブラリ関数のアドレスを把握するためです。非常に短期間のプログラムをプロファイリングしている場合、ほとんどの時間が独自のコードではなく、内部の「ハウスキーピング」機能に費やされていることに驚くことはありません。