33

ルーチンは呼び出されるまでロードされません。すべてのルーチンは、再配置可能なロード形式でディスクに保持されます。メインプログラムがメモリにロードされ、実行されます。これは動的リンクと呼ばれます。

なぜこれが動的リンクと呼ばれるのですか? ルーチンは動的ロードで呼び出されるまでロードされないため、動的ロードではありませんが、動的リンクの場合と同様に、リンクは実行時まで延期されます。

4

8 に答える 8

20

動的読み込みとは、読み込み中または実行時にライブラリ (またはその他のバイナリ) をメモリに読み込むことを意味します。

動的ロードはプラグインに似ていると想像できます。つまり、動的ロードが発生する前に exe を実際に実行できます (たとえば、動的ロードは、C または C++ で LoadLibrary 呼び出しを使用して作成できます)。

動的リンクとは、exe の作成時ではなく、ロード時または実行時に行われるリンクを指します。

exeの作成中にリンカーを動的にリンクする場合、最小限の作業が行われます。動的リンカーが機能するには、実際にはライブラリもロードする必要があります。したがって、リンクローダーとも呼ばれます。

したがって、あなたが参照している文は意味があるかもしれませんが、それが参照している文脈を推測できないため、依然として非常にあいまいです。

于 2012-04-07T07:30:38.973 に答える
10

動的ローディングとは、実行可能ファイルまたはライブラリーをプロセスの開始後にプロセスのメモリーにマッピングする (またはあまり頻繁にコピーしない) ことを指します。動的リンクとは、コンパイル時にシンボルを解決すること (シンボルの名前をアドレスまたはオフセットに関連付けること) を指します。

quoraのJeff Darcyによる完全な回答へのリンクは次のとおりです

http://www.quora.com/Systems-Programming/What-is-the-exact-difference-between-Dynamic-loading-and-dynamic-linking/answer/Jeff-Darcy

于 2014-02-03T03:15:59.063 に答える
7

私は「恐竜の本」も読んでいて、ロードとリンクの概念に混乱していました。ここに私の理解があります:

  1. 動的読み込みとリンクは実行時に行われ、必要なものはすべてメモリに読み込まれます。

  2. 主な違いは、動的ローディングはルーチンがローダーによってロードされたかどうかをチェックするのに対し、動的リンクはルーチンがメモリー内にあるかどうかをチェックすることです。

  3. したがって、動的リンクの場合、メモリ内にはライブラリ コードのコピーが 1 つだけ存在しますが、これは動的読み込みには当てはまらない場合があります。そのため、動的リンクでは、他のプロセスのメモリをチェックするために OS サポートが必要です。この機能は、多くのプログラムで共有される言語サブルーチン ライブラリにとって非常に重要です。

于 2016-10-12T15:27:49.677 に答える
2

動的リンカーは、プログラムの実行を開始する前に、プログラムのすべての動的依存関係をロードしてバインドするランタイム プログラムです。動的リンカは、プログラムが必要とする動的ライブラリ、それらのライブラリが必要とするライブラリ (など) を見つけ、それらすべてのライブラリをロードし、関数へのすべての参照が適切な場所を正しく指していることを確認します。たとえば、最も基本的な「hello world」プログラムでさえ、通常、出力を表示するために C ライブラリを必要とするため、ダイナミック リンカは、hello world プログラムをロードする前に C ライブラリをロードし、printf() へのすべての呼び出しが確実に実行されるようにします。正しいコードに。

于 2013-07-13T12:32:46.487 に答える
0

静的リンクと動的リンクには 2 つのタイプがあります。実行時に出力ファイルが依存関係なしで実行される場合 (files=Library)、このタイプのリンクは静的と呼ばれ、動的には 2 つのタイプがあります。 1.動的ロード リンク 2.動的ランタイム リンク.これらについては以下で説明します

動的リンクとは、ライブラリ ファイルがプライマリ メモリに読み込まれ、リンクされるランタイム中のリンクを指します (関数呼び出しに関係なく、これらはリンクされます)。

動的ランタイム リンクとは、必要に応じてリンクすることを意味します。つまり、その時点で関数呼び出しが発生するたびに、実行時にリンクします。すべての関数がリンクされるわけではなく、これはコードの記述とは異なります。

于 2014-02-25T11:07:28.273 に答える