Share via


ダイナミック リンクの利点

動的リンクには、静的リンクよりも次の利点があります。

  • 同じベース アドレスに同じ DLL を読み込む複数のプロセスは、物理メモリ内の DLL の 1 つのコピーを共有します。 これにより、システム メモリが節約され、スワップが削減されます。
  • DLL 内の関数が変更された場合、関数の引数、呼び出し規則、および戻り値が変更されない限り、それらを使用するアプリケーションを再コンパイルまたは再リンクする必要はありません。 静的リンクのオブジェクト コードの場合は、関数が変更されると、アプリケーションをリンクし直す必要があります。
  • DLL は、市場後のサポートを提供できます。 たとえば、ディスプレイ ドライバー DLL は、アプリケーションが最初に出荷されたときに使用できなかったディスプレイをサポートするように変更できます。
  • 異なるプログラミング言語で記述されたプログラムは、プログラムが関数で使用するのと同じ呼び出し規則に従っている限り、同じ DLL 関数を呼び出すことができます。 呼び出し規約 (C、Pascal、標準呼び出しなど) は、呼び出し元関数がスタックに引数をプッシュする必要がある順序、関数または呼び出し元関数がスタックのクリーンアップを担当するかどうか、およびレジスタで引数を渡すかどうかを制御します。 詳細については、コンパイラに含まれているドキュメントを参照してください。

DLL を使った場合に逆に欠点となり得るのは、アプリケーションが単体では使えない点です。アプリケーションは、別個の DLL モジュールなしには動作しません。 システムは、プロセスの起動時に見つからない DLL が必要な場合に、読み込み時の動的リンクを使用してプロセスを終了し、ユーザーにエラー メッセージを表示します。 この状況では、システムは実行時ダイナミック リンクを使用してプロセスを終了しませんが、不足している DLL によってエクスポートされた関数はプログラムで使用できません。