2011-01-22 6 views
0

私はなぜリンカーとローダーのプログラムを分けるべきですか?私が理解しているのは、リンカがリロケータブルコードを生成し、シンボルテーブルを構築し、動的リンクされたlibに関する情報を提供し、ローダが実行可能ファイルをメモリにロードするだけなのかどうかです。なぜ我々は両方をマージしないのですか?なぜリンカーとローダーを別々のプログラムに分けるのですか

ありがとうございました

+1

あなたはここでどの言語を話していますか?実行可能ファイルにはローダープログラムは必要ありません。 – Neo

+0

私はc、C++について話しています。 – hue

答えて

5

いくつかの理由があります。静的ライブラリには数千の異なる機能が含まれている場合があります。しかし、1つのプログラムでは、特定のライブラリにある機能のうちのほんの一部しか使用しない場合があります。リンカーとローダーが同じプログラムである場合は、静的ライブラリ全体をアプリケーションと共に出荷する必要があります。わずか数キロバイトの小さなC++プログラムを考えてみましょう。これは、数MBのサイズの静的なランタイムライブラリとリンクすることによって作成されます。

ローダーをリンクする必要がある場合は、ローダーの複雑さが増し、オペレーティングシステムカーネルのサイズが大きくなります。リンクは非常に複雑な作業であり、時間がかかります。オペレーティングシステムの仕事ではありません。 OSはプログラムを構築するのではなく、プログラムを実行することに関係している必要があります。

+1

要約すると(私が間違っていると私を修正してください)、ロードはosによって行われます。したがって、osによって費やされる時間を減らすために、リンカーとローダーを分離する必要があります。 – hue

+0

@hue:これは私の議論の要点ですが、全体ではありません。いくつかのシステム(組み込みシステムやモバイル機器と思う)にはリンクを行うためのリソースがありません。そして、再び、データサイズの問題があります。 5キロバイトのオブジェクトファイルと複数メガバイトの静的ライブラリを出荷するよりも、完全に構築された10キロバイトのプログラムイメージを出荷する方が簡単です。 –

関連する問題