事前バインディング
事前バインディングは、初期バージョンのmacOS(以前のMac OS X)で、アプリケーションの起動を速くするために使われていた最適化技術です。macOSでアプリケーション、ライブラリ、その他の実行可能コードに使われるネイティブ形式であるMach-Oファイルと連携して動作しました。
事前バインディングの仕組み
アプリケーションは、複数のプログラムで使われるコードを含む共有ライブラリに依存することがよくあります。通常、動的リンカーはこれらのライブラリを探してメモリに読み込み、ライブラリ内の関数やデータへの参照を解決する必要があります。事前バインディングでは、アプリケーションの起動前に優先メモリアドレスを割り当て、解決済みの参照を記録することで、この作業の一部をあらかじめ実行していました。
初期バージョンのMac OS Xでは、ソフトウェアのインストール中、またはシステムの最適化処理中に事前バインディングを実行していました。この処理によってアプリケーションの起動時間は短くなりましたが、アプリケーションやそのライブラリのいずれかに変更を加えると、事前バインディング情報が無効になり、再生成が必要になることがありました。また、オペレーティングシステムが位置独立コードやアドレス空間配置のランダム化(ASLR)を採用するようになると、この技術はあまり役に立たなくなりました。これらはセキュリティを高めるために、メモリの位置を意図的に変化させます。
現代における事前バインディング
現在のmacOSでは、従来の事前バインディングは使われていません。その代わりに、Appleの動的リンカーであるdyldは、共有動的リンカーキャッシュや起動クロージャなどの技術を使って、Mach-Oアプリケーションを効率的に読み込みます。これらの技術には同様の効果がありますが、事前バインディングという用語は、技術的には初期バージョンのMac OS Xで使われていた処理を指します。
知識をテストする