静的リンク

静的リンクせいてきリンク英語: static link)とは、コンピュータプログラム作成時において、ライブラリあるいはアプリケーションプログラムモジュールをビルドする際に、各モジュールに必要なプログラムコードの実体すべてをリンケージエディタによってリンクしてモジュールに含める方式。

コンパイラによってソースコードから生成されたオブジェクトファイルを、リンク時につなぎ合わせ、実行可能形式のバイナリ実行ファイル)を作成する。

静的リンキングスタティックリンキングとも言う。

静的リンクの利点としては、モジュール自身に必要なコードが含まれているため自己完結できることや、シンボルの解決が事前に(静的に)実施されるためプログラム実行時のオーバーヘッドがないことなどが挙げられる。ライブラリやアプリケーションの実行モジュールが静的リンクによって単一のバイナリとしてビルドされている場合、配布やインストールが簡単になり、依存関係の管理もしやすい。

静的リンクの欠点としては、各モジュールに重複するコードやデータがあったとしても、それぞれに実体が存在するためモジュールのサイズが大きくなってしまうことや、ライブラリの実装を変更したときに、たとえライブラリのインターフェイスに変更がなくてもプログラムを再リンクする必要があることなどが挙げられる[1]。静的リンクされるコードの量が増えると、ビルド時のリンク時間が増大し、開発サイクルが鈍化する原因となる。また、重複するコードやデータはメモリを圧迫し、キャッシュが頻繁にクリアされることで実行速度が低下する原因にもなる。大多数のユーザーが使わないような雑多な機能に関連する処理(サブルーチン)やデータ(グローバル変数)あるいは他の言語のリソースなども静的リンクによってすべて単一のバイナリに含まれている場合、モジュールがメモリにロードされるとデッドスペースと化してしまう。

なお、静的リンクライブラリは通例処理系ごとに固有のアプリケーションバイナリインタフェース (ABI) に依存する形式となるため、ABI互換のない処理系間で共有・再利用することはできない。

対義語

共有ライブラリあるいはダイナミックリンクライブラリ (DLL) にプログラムコードの実体を分割しておき、プログラムの実行開始時にローダによって初めて結合する方式を動的リンクと呼ぶ。動的リンクの利点と欠点は静的リンクの逆となる[2]

脚注

  1. ^ Create C/C++ DLLs in Visual Studio | Microsoft Docs
  2. ^ Advantages of Dynamic Linking - Win32 apps | Microsoft Learn

関連項目

  • 表示
  • 編集