Что такое "инкрементное связывание"?

Я посмотрел на MSDN Microsoft и все вокруг сети, но я все еще не смог получить действительно хорошее представление о том, что это такое.

Означает ли это, что завершенная программа загружает библиотеки DLL в разное время во время выполнения, как все сразу при запуске?

Я совсем далеко?:)

2 ответа

Связывание включает в себя упаковку всех файлов.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

Также, что очень важно, инкрементная ссылка является обязательным условием для Edit&Continue - возможно редактировать ваш код и перекомпилировать его на лету, без перезапуска.

Поэтому хорошо иметь отладочные сборки, а не релизные.

Другие вопросы по тегам