114

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

完成したプログラムは、起動時に一度にすべてのDLLをロードするのではなく、実行中のさまざまな時間にDLLをロードすることを意味しますか?

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

4

2 に答える 2

127

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

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

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

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

それが持つかもしれない唯一の実行時の影響は、ここで説明されているように、exe /dllを少し大きくして遅くするかもしれないということです:

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

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

開発を高速化するためにデバッグビルドにインクリメンタルリンクを使用することもできますが、ランタイムパフォーマンスを向上させるために、リリースビルドではインクリメンタルリンクを無効にします。

遅延ロードされたDLLはあなたが考えているものかもしれません:

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

于 2010-07-28T02:52:52.863 に答える
15

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

そのため、デバッグ ビルドでは有効ですが、リリース ビルドでは有効ではありません。

于 2014-04-22T15:30:04.137 に答える