lib*.so
ライブラリがコンパイルgcc -Wall -fPIC -O2
およびリンクされた共有オブジェクト (つまり、何らかのファイル) でgcc -shared
ある場合、それはELF 位置独立コード共有ライブラリです。
PIC は、PIC を容易にするアドレッシング モードを備えた 64 ビット x86-64 よりも、レジスタが少ない 32 ビット x86 では少しコストがかかります。
それがdlopen
-ed であるか、動的にリンクされている場合でも、(安定した状態で) パフォーマンスは同じです。どちらの場合も、実際のリンクは動的リンカーによって行われるため(例: ld-linux.so
) sinelibdl.so
は基本的に動的リンカーのラッパーです。
呼び出されたときのパフォーマンスに関して重要なのは、 内のコードでありlib*.so
、それをリンクしたりリンクしたりしても変更されませんdlopen
。
ライブラリが静的にリンクされている場合は、状況が少し異なる可能性がありますlib*.a
。最近の GCC コンパイラのリンク時間最適化機能を使用して、ライブラリとプログラムの両方をコンパイルしてリンクすることもできます (コンパイルしてリンクします) 。gcc -flto -Wall -O2
Drepper のHow to Write Shared LibraryペーパーとProgram Library HowToおよびLevine の Linkers & Loaders book を読んでください。