18.5 静的なリンクと動的なリンク
ここでは,プログラム間連絡での静的なリンクと動的なリンクの違いについて説明します。
リンク方法や,実行可能ファイルの作成方法については,「34 実行可能ファイルと共用ライブラリの作成」を参照してください。また,共用ライブラリの静的なリンクと動的なリンクについては,「18.6.2 共用ライブラリに含まれるプログラムの呼び出し方法」を参照してください。
- 〈この節の構成〉
(1) 静的なリンク
- 静的なリンクとは
-
静的なリンクとは,オブジェクトファイルのリンク時にプログラムの呼び出しを解決して,実行可能ファイルを生成するリンク方法です。
静的なリンクとは,次の両方のことを指します。
-
オブジェクトファイルを静的に結合して,一つの実行可能ファイルを生成すること
-
実行可能ファイルに共用ライブラリをリンクし,呼び出し先プログラム名の名前解決を静的にすること
-
- 静的なリンクの長所と短所
-
静的にリンクすると,主プログラムがメモリにロードされるのと同時に,呼び出し先プログラムもロードされます。そのため,プロセス起動時にはロード時間が掛かりますが,CALL文でほかのプログラムを呼び出すとき,すでにメモリ上にプログラムがロードされているので,高速に呼び出せます。
- 静的にリンクした方がよいケース
-
同じプログラムを何度も呼び出すようなプログラム構造の場合は,静的にリンクした方がプログラムの実行性能が良くなります。
(2) 動的なリンク
- 動的なリンクとは
-
動的なリンクとは,呼び出し先プログラムの情報を保持しない実行可能ファイルを生成するリンク方法です。
動的なリンクでは,CALL文での呼び出し先プログラム(副プログラム)と呼び出し元プログラム(主プログラム)とを別ファイルで生成しておきます。呼び出し先プログラムは,呼び出し元プログラムがCALL文を実行したとき,メモリにロードされます。
- 動的なリンクの長所と短所
-
動的にリンクすると,主プログラムがメモリにロードされても,副プログラムはロードされないため,プロセス起動時のロード時間が静的リンクより高速になります。また,プログラムが消費するメモリ空間が少なくて済みます。しかし,CALL文の実行時に,呼び出し先プログラムのロードと検索処理が実行されるため,CALL文の処理時間は遅くなります。
- 動的にリンクした方がよいケース
-
処理の流れによって呼ばれないことがある副プログラムがある場合は,動的にリンクした方がプログラムの実行性能が良くなります。