動的および静的リンクリンク

C / C ++コンパイルするプログラマーやリンクプロセスが胸で明らかになるように。まず、コンパイラは最初のすべてのソースファイルの前処理の、3つのステップに分割され、アウトライン、このプロセスは*、生成する(プリコンパイラディレクティブの#ifdefなど、#には、マクロなど)コマンドまたはステートメントを定義#のいくつかに対処するために主にあります。ファイル私は、その後、コンパイルされ、このプロセスは、主に編集ファイルを生成するための字句解析、構文解析、意味解析* .Sであり、最終的に組み立てられ、このプロセスは比較的簡単ですが、それは機械語命令に対応するアセンブリ命令を翻訳することです、バイナリオブジェクトファイルの再配置可能なを生成します。静的リンクと動的リンク - これらは、以下は、主に二つの方法のリンクを記述し、コンパイルプロセスです。

        静的にリンクされたと2の間で動的にリンクされた最大の違いは、タイミングは、リンクが実行可能な形式の前にまだある、同じリンクではなく、動的にプログラムの実行、これらの2つの方法リンクを作成するには以下の詳細な説明中にリンクされていることです。

静的リンク
なぜ我々は静的にリンクする必要があります。1.
        ソースファイル内のすべてのコードを配置することは不可能で、私たちの実際の開発では、その複数のソースファイルがあるだろう、と複数のソースファイル間では独立していないが、これは、ソースファイルなどの様々な依存関係がソースファイルに定義された別のコール機能であってもよい存在するが、ソースファイルの各々は、独立してコンパイルされ、すなわち、各ファイル*の.C * .oファイルの順番を形成します依存関係が先に述べたターゲットファイルを満たし、あなたが実行可能なプログラムを形成するためのリンクによって生成されたこれらのソースファイルに必要です。このプロセスは、静的にリンクリンクされています

静的リンクの2原理
         多くのオブジェクトファイルでは、静的ライブラリを形成するために、およびその逆は、静的ライブラリであり得るリンクされている、すなわち、多くの圧縮梱包後のファイルオブジェクトファイルは、図のように、形成された単にオブジェクトファイルのグループとしての集まりです。からなるARコマンド-aパラメータビュー静的ライブラリを使用しました:

 

        ここに*私の以前のブログ、「メモリの解像度で実行しているから、全体のプロセスのためのソースコードを書く」での.oオブジェクトファイルは、私はそれを見ることができるかわからない、非常に明確に述べています。

        以下の図では簡単にそのようなlibcのprintf関数の定義stdio.hの()関数としてライブラリ関数、に含まれるヘッダファイルとソースファイルの用途に応じて、静的実行可能ファイルにリンクからの手順を説明します(ここでのprintf(依存機能)考えていない)、対象ファイルprintf.oを見つける.A、その後、対象のファイルと我々はリンクをhello.oファイルは、当社の実行可能ファイルを形成します。

 

        (そこの小さな問題は、静的なランタイムオブジェクトファイルが一つだけの機能が含まれている内部の私たちは、このようなprintf.oのみのprintf()関数内のlibc.aとして、見ることができます上の図から、つまり、ある、strlen.oのみstrlenをあっています)機能。

        当社は、リンク静的リンクライブラリ内のリンクは、ターゲットは、ファイル単位であることを知っているとき。例えば、我々は静的ライブラリのprintf()関数を参照して、リンカはそのオブジェクトファイルのリンクのライブラリのprintf()関数に含まれる一つのオブジェクト・ファイル内の多くの機能、それは無用の多くなる可能性がある場合、入って来関数は、出力の中に一緒にリンクされています。ランタイム機能の何百もあるので、独立して、対象ファイルの非常に大きな、各機能の数は、無駄なスペースを最小限に抑えることができ、かつ、対象ファイルのものが使用されていない、最終的な出力ファイルにリンクしていません。


3.静的にリンクの長所と短所
        同じターゲット・ファイルに複数のプログラムを持っているので、もし、すべての実行可能プログラムは、必要なすべてのターゲットファイルのコピーを持っている必要がありますので、欠点は、静的に明らかにリンクされ、一つは、スペースの無駄ですこのような複数のプログラムのような依存性は、すべてが複数のプログラムが含まれてprintf.oのprintf()関数と呼ばれるので、同じオブジェクトファイルの複数のコピーがメモリ内に存在している;他はより困難に更新され、各ので時にコードのライブラリ関数が変化し、この時間は、実行可能プログラムを形成するために連結され、再コンパイルする必要があります。利点は、静的にリンクされているが、実行可能プログラムは、実行時に高速に実行するために必要なすべての手順を実行するために何かを持っています。

問題:

第二に、ダイナミックリンク
1.なぜダイナミックリンクがあり
        、ダイナミックリンクの出現の理由は、一方では、静的にリンクに記載された二つの問題を解決することを目的とする一方で更新することが困難であり、スペースの無駄です。ここでは、この2つの問題を解決する方法を説明します。

動的リンクの原則2.
        プログラムの基本的な考え方を動的に比較的独立したモジュールにセクション分割に合わせてリンクされているそれらはすべてのプログラムモジュールのように、静的にリンクされたのではなく、完全なプログラムを形成するために一緒にリンクされているとき、プログラムがで実行されます彼らは、単一の実行可能ファイルにリンクされています。以下は、動的リンクの処理の概要を示します。

        見つかったlib.oシステムprogram1.oで使用される場合、最初の実行プログラムプログラム1、第負荷program1.oシステムを仮定すると、二つのプログラムとprogram1.oのprogram2.oがあると仮定し、両方とも同じライブラリlib.oを共有それはprogram1.oとlib.oもメモリにロードされているすべての後、他のターゲットファイルに依存している場合、システムが、その後、lib.oをロードし、lib.o program1.oに依存します。PROGRAM2が同じ負荷program2.oを実行すると、その後、lib.oにprogram2.o依存したが、今回のlib.oは既にこの時間は、もはや再ロードされず、メモリ上に存在しますが、メモリがされていますlib.oの存在は、(リンク処理を静的同様のリンクされた)リンク実行可能プログラムを形成するために、仮想アドレス空間PROGRAM2にマッピングされました。

3.ダイナミックリンクの長所と短所が
        ダイナミックリンク明白な利点は、すべてのプログラムが同じライブラリに依存する必要がある場合でも、ということですが、ライブラリは、実行中のスタティックリンクのようなメモリ内のコピー上の点が、この複数のプログラムとして存在しません。あなたが同じコピーを共有する場合、別の利点は、更新もより便利であるということである、唯一のすべてを再び再リンクするプログラムを必要とせずに、更新され、元のターゲットファイルを交換する必要があります。プログラムの下で実行すると、ターゲット・ファイルの新しいバージョンが自動的にメモリにロードされ、目標のアップグレードを完了するためのプログラムをリンクアップされます。しかし、プログラムが実行されるまでのリンクを延期するので、ダイナミックリンクは、欠陥がある、それぞれの実行手順をリンクする必要があり、そのパフォーマンスの若干の損失があるでしょう。

        動的および静的リンクのリンク性能が約5%以下の損失と比較していると推定されます。練習では、これは構築し、それだけの価値があるアップグレードするプログラムのスペースと柔軟性の節約を交換するために使用パフォーマンスペナルティエリアの手続きであることを証明しました。

4.ダイナミックリンクアドレスは、それを再検索する方法ですか?
        以前、我々はそれを再配置するためにどのようにでしょうか?私たちは今、ダイナミック・リンク・アドレスを考えていることを、アドレスの静的リンク移転の話しましたか プログラムの実行が、実行可能ファイル(実行可能ファイルの生成を注意し、二つの概念であるプログラムを実行)、またはダイナミックリンクライブラリを使用する必要が形成されるまで動的リンクリンク処理を延期することがありません。例えば、我々は実行可能なプログラムを形成する際に、参照外部関数を発見し、その後、ダイナミックリンクライブラリをチェックし、関数名は、動的リンクシンボルであると移転の今回実行できない記号を発見し、このプロセスは、それまでにロードされます。
----------------
免責事項:この記事は元の記事CSDNブロガー「kang___xi」であり、BY-SAの再現著作権契約、CC 4.0に従って、元のソースのリンクと、この文を添付してください。 。
オリジナルリンクします。https://blog.csdn.net/kang___xi/article/details/80210717

おすすめ

転載: www.cnblogs.com/liangyc/p/11628163.html