「インクリメンタルリンク」とは何ですか?


105

私はMicrosoftのMSDNとWeb全体を見てきましたが、それが何であるかについて本当に良い考えを得ることができませんでした。

起動時に一度にすべてに対して実行されるように、完了したプログラムがその実行中に異なる時間にDLLをロードすることを意味しますか?

私は完全に離れていますか?:)


1
:私はGNU ldのための答えを追加しましたが、それが削除された、ここでは同様のものであるstackoverflow.com/questions/29391965/...
チロSantilli郝海东冠状病六四事件法轮功

コピー、貼り付け、および分岐が悪いため、削除されました。コンテンツがどれほど優れていてもen.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

回答:


122

リンクには、ソースファイルから作成したすべての.objファイルと、参照する.libファイルを出力(例:.exeまたは.dll)にパッケージ化することが含まれます。

インクリメンタルリンクを使用しない場合、これは毎回ゼロから行う必要があります。

インクリメンタルリンクは、小さな変更を加えて再コンパイルするときに、リンカーが既存のexe / dllを更新しやすくする方法でexe / dllをリンクします。

したがって、インクリメンタルリンクを使用すると、プロジェクトのコンパイルとリンクがより高速になります。

ここで説明するように、実行時の唯一の影響は、exe / dllがわずかに大きく、遅くなることです。

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

編集:ローガンが述べたように、インクリメンタルリンクもリンク時のコード生成と互換性がないため、パフォーマンスの最適化が失われます。

デバッグビルドでインクリメンタルリンクを使用して開発をスピードアップし、リリースビルドではそれを無効にしてランタイムパフォーマンスを向上させることができます。

DLLの遅延読み込みは、あなたが考えていることかもしれません:

http://msdn.microsoft.com/en-us/library/151kt790.aspx


ああ、とにかくリンカーは常にこれを行っていると思いました!したがって、シャットダウンするincremental linkingと、リンカは毎回すべてを最初からリンクしますか?
ラッセル

6
「実際には、これの影響はおそらく心配する価値がない。」「通常の」リンクとインクリメンタルリンクの違いは、実行時のパフォーマンスではそれほど優れていないかもしれませんが、インクリメンタルリンクは、リンク時のコード生成と互換性がなく、パフォーマンスに大幅な違いが生じる可能性があることに言及する価値があります。
Logan Capaldo

2
@ラッセル:そうです。@Logan:ありがとう、回答を更新しました。
Saxon Druce、2010

それでは、本番ビルドではこのオプションをオフにする必要があるということですか?
RBT

1
@RBT、そうです。
Ajay、

15

また、非常に重要なことですが、インクリメンタルリンクは前提条件ですEdit&Continue。再起動せずに、コードを編集してその場で再コンパイルすることができます。

ですから、デバッグビルドではいいのですが、リリースビルドではそうではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.