1秒間に1万件ほど処理するかなりハードなシステムで、あるライブラリを導入するときに「静的リンクじゃないと遅いよ?」と指摘をうけました。私は「ロードコストは確かにかかるかもしれないけど、なんで動的な方が遅いの?ロード後はアドレスジャンプだから実行時コストは変わらないのでは?」という疑問を持ちました。この答えを探した結果、結構長い調べ物になりました。 そもそもリンクとはなにをしているの? 分割コンパイルしている場合、それぞれのソースにたいしてオブジェクトファイルが生成され、そのオブジェクトファイル同士をリンクし実行ファイルを生成します。 オブジェクトファイルって? コンパイラが解析翻訳した機械語や様々な情報のつまった中間ファイルです。そのままでは実行できません。linuxではELFというフォーマットが一般的です。 実はあれもこれもELFフォーマット 実行可能ファイル 共有オブジェクトファイル