動的リンクとは
動的リンク(dynamic link)は、その名が示すように、静的なリンクとは対照的に、実行時あるいは参照時にリンクが確立される方式を指します。この用語は主に2つの異なる分野で使用されます。
1.
コンピュータプログラムにおける動的リンク
コンピュータプログラムの世界では、動的リンクはプログラムの実行中に
モジュールを結合する方式として知られています。大規模なプログラムは通常、複数の
モジュールに分割されます。これらの
モジュールは、
コンパイラによって
ソースコードから
オブジェクトファイルに変換された後、
リンケージエディタによって結合され、最終的な実行可能ファイルが生成されます。この結合プロセスにおいて、すべてのプログラムコードを事前に結合する静的リンクに対し、動的リンクではプログラムの実行開始時に初めて他の
モジュールと結合を行います。
### 動的リンクのメカニズム
動的リンク機構を利用した
ライブラリは、動的リンク
ライブラリ(DLL)と呼ばれます。Windows環境ではDLLと略されることが多く、複数のプログラムから共有されることで、コードの重複を避けるとともに、メモリ使用量を削減する効果があります。このような
ライブラリはしばしば「共有
ライブラリ」として運用されます。
### 動的リンクの利点と欠点
動的リンクの主な利点として、以下の点が挙げられます。
モジュールのサイズを小さくできる
ライブラリの変更時にプログラムの再リンクが不要な場合がある
一方、欠点としては、
モジュールが自己完結できない
実行時のオーバーヘッドがある
などが挙げられます。動的リンクは、通常、アプリケーション起動時に必要なシンボルの解決を行う早期束縛(アーリーバインディング)の形式をとりますが、遅延束縛(レイトバインディング)をサポートする環境もあり、必要に応じて
モジュールを動的にロードすることも可能です。
### 共有
ライブラリとDLL地獄
共有
ライブラリは複数のアプリケーションから利用できる便利な仕組みですが、いくつかの問題点も抱えています。
ライブラリのバージョンアップによってプログラムが動作しなくなる、あるいは、バージョンアップした
ライブラリに
バグがあると、その
ライブラリを利用する全てのソフトウェアに影響が及ぶ、といった問題があります。特に、システム全体で共有される
ライブラリの場合、この影響は深刻になる可能性があります。これらの問題は「DLL地獄(DLL Hell)」と呼ばれることもあります。
###
プラグイン
動的ロードや動的リンクの仕組みを応用したものが
プラグイン機構です。これにより、サードパーティの開発者やエンドユーザーがアプリケーションの機能を拡張できるようになります。
プラグインは特定のインターフェイス仕様に従って実装された
サブルーチンであり、アプリケーションから探索してコールバック関数として呼び出すことができます。
動的ロードをサポートするAPIとしては、Windowsでは`LoadLibrary()`と`GetProcAddress()`が、
POSIX環境では`dlopen()`と`dlsym()`が用意されています。
2.
ハイパーテキストにおける動的リンク
ハイパーテキストの世界では、動的リンクは
ハイパーテキストを記述した時にリンクを予め定義するのではなく、参照時に動的にリンクを決定する方式を指します。これにより、より柔軟で動的なコンテンツの表示が可能になります。
まとめ
動的リンクは、
コンピュータプログラムと
ハイパーテキストの分野で、それぞれ異なる重要な役割を果たしています。プログラムにおいては、効率的な
モジュール管理とコードの再利用を可能にし、
ハイパーテキストにおいては、より柔軟なコンテンツ表示を実現します。それぞれの分野において、動的リンクは現代の技術を支える重要な要素となっています。
関連事項
ダイナミックリンクライブラリ
静的リンク