20/03/29 08:36:03.65 3RvKBAiL.net
>>293
スタティックリンクすると、動的リンクのコストとライブラリのロードのコストによるけど
起動は遅くなる可能性の方が高いし、メモリの使用量は増えるし、ライブラリにセキュリティ
ホールがあると対応が面倒になる
Linuxはfork(clone)とcopy on writeで新しいプロセスを生成し、元のプロセスと異なって
いる部分だけ実際に使われるタイミングでメモリ上に確保される
例えば、glibcはほとんどのプログラムが動的リンクしていて、bashは起動時にglibcを
メモリ上にロードしているから、bashからlsを起動するとglibcの部分はbashと共有され
glibcをロードせずに済む
起動時にglibcと動的リンクするコストがあるからその分時間がかかるけど
lsをスタティックリンクすると起動時にlsの部分だけでなくglibcの部分もロードする時間が
かかりglibcの分メモリを余計に消費することになる
これを上手に活用しているのがAndroidで、zygoteというプロセスがActivity(アプリの
各画面)やService(ダウンロード等のバックグランドで実行される部分)に必要な
ライブラリを全部ロードしていて、アプリ起動時にzygoteをforkしてActivityやServiceを
作るから、アプリの本体だけロードすればいいようになっている
それにglibcにバグがあったら動的リンクならライブラリを差し替えるだけで対応できるが
スタティックリンクの場合新しいライブラリとスタティックリンクしたバイナリを作って
差し替える手間がかかる
実際WindowsでもLinuxでもzlib(zipのライブラリ)にセキュリティホールがあったとき
大変なことになった