静的リンクと動的リンクの主な違いは、静的リンクではコンパイルの最終段階でプログラムで使用するすべてのライブラリモジュールを最終的な実行ファイルにコピーするのに対し、動的リンクでは実行ファイルとライブラリの両方がメモリに配置される実行時にリンクが行われる点です。
一般に、コンピュータプログラムは、コンピュータやCPUにあるタスクを実行するよう指示する、プログラミング言語による一連のステップのことである。
プログラマーがこのプログラムを理解していても、コンピュータは理解していない。
そのため、ソースコードをマシンコードに変換する必要があります。
また、このプログラムには他のプログラムやライブラリが必要な場合があります。
その場合、そのプログラムやライブラリをこのプログラムと一緒に持ってきて実行する必要があります。
このように、プログラマーのプログラムに外部のプログラムを組み合わせて、うまく実行させることをリンクといいます。
リンクの仕組みには、静的リンクと動的リンクの2つがあります。
スタティックリンクとは
スタティックリンクは、プログラムに必要なすべてのライブラリを最終的な実行ファイルにコピーします。
リンカはこのタスクを実行し、コンパイルの最後のステップとなる。
リンカは、関連するライブラリをプログラムコードと結合し、外部参照を解決します。
最後に、リンカーはメモリへのロードに適した実行ファイルを生成します。
最終的に統計的にリンクされたファイルには、呼び出しプログラムと呼び出されたプログラムが含まれています。
一般に、これらのファイルは他のファイルと連結されているため、サイズが大きくなる。
ダイナミックリンクとは
ダイナミックリンクでは、外部ライブラリや共有ライブラリの名前を最終的な実行ファイルにコピーするため、実際のリンクは実行ファイルとライブラリがメモリにロードされるランタイムに行われます。
オペレーティングシステムはダイナミックリンクを行う。
一般に、共有ライブラリのコピーはメモリ上に1つしか存在しません。
そのため、実行ファイルのサイズは小さくなります。
外部ライブラリの更新や再コンパイルが可能である。
また、共有ライブラリのコードがすでにメモリ上にあれば、ロード時間が短縮されます。
通常、ダイナミック・リンクでは、互換性のあるライブラリがあった方が良い。
ライブラリに変更があった場合、アプリケーションは新しいバージョンのライブラリとの互換性を確保する方法を見つけなければなりません。
さらに、ライブラリを削除すると、プログラムがさらに動作しなくなる可能性があります。
スタティックリンクとダイナミックリンクの違い
定義
静的リンクは、プログラムで使用されるすべてのライブラリモジュールを最終的な実行イメージにコピーするプロセスです。
これに対し、ダイナミックリンクは、外部の共有ライブラリをプログラムにロードし、それらの共有ライブラリをプログラムに動的に結合する処理です。
したがって、これがスタティックリンクとダイナミックリンクの主な違いです。
発生状況
また、静的リンクはコンパイルの最終段階、動的リンクは実行時に行われます。
ファイルサイズ
統計的にリンクされたファイルはサイズが大きくなりますが、動的にリンクされたファイルはサイズが小さくなります。
ロード時間
また、静的リンクは一定のロード時間を要しますが、動的リンクはロード時間が短くなります。
これもスタティックリンクとダイナミックリンクの違いのひとつです。
互換性
スタティックリンクの場合、互換性の問題はありません。
一方、ダイナミックリンクの場合は互換性に問題があります。
結論
簡単に説明すると、スタティックリンクとダイナミックリンクは2つのリンク機構です。
静的リンクと動的リンクの主な違いは、静的リンクはコンパイルの最終段階でプログラムで使用するすべてのライブラリモジュールを最終的な実行ファイルにコピーするのに対し、動的リンクは実行時に実行ファイルとライブラリの両方がメモリに配置された時点でリンクが行われることである。