Разница между динамической связью во время загрузки и во время выполнения - PullRequest
8 голосов
/ 16 февраля 2009

В чем разница между динамическим связыванием во время загрузки и динамическим связыванием во время выполнения?

Ответы [ 3 ]

15 голосов
/ 16 февраля 2009

Динамическое связывание во время загрузки

Когда исполняемый файл связан с DLL во время сборки, компоновщик не будет вставлять объектный код, а вставит заглушку , которая в основном говорит, что функция этого имени находится в это DLL .

Теперь, когда исполняемый файл запущен, биты исполняемого файла будут отсутствовать (т. Е. Заглушки для функций ), поэтому перед тем, как запустить программу, загрузчик исправляет эти отсутствующие функции, заменяя их входом указывает на файлы DLL.

Только после замены всех заглушек (т. Е. Разрешения) исполняемый файл будет разрешен для запуска.

Это динамическое связывание во время загрузки.

Динамическое связывание во время выполнения

В этом случае исполняемый файл не был связан ни с одним файлом библиотеки DLL, поэтому он не будет содержать никаких заглушек в dll, и поэтому у загрузчика программы нет проблем с запуском исполняемого файла.

Но задача получения доступа к функции из библиотеки DLL оставлена ​​для исполняемого файла и может быть выполнена с помощью GetProcAddress Windows API.

Это динамическое связывание во время выполнения.

2 голосов
/ 16 февраля 2009

Вы забыли тег "домашнее задание".

Связывание во время загрузки означает, что DLL-библиотека, с которой вы ссылаетесь, загружается при запуске приложения, независимо от того, используете ли вы на самом деле функциональность в этой DLL-библиотеке. Динамическое связывание означает, что функциональные возможности DLL загружаются только тогда, когда это действительно необходимо.

0 голосов
/ 24 января 2017

Динамическое связывание во время загрузки выполняется операционной системой при загрузке приложения. ОС использует информационный компоновщик, помещенный в файл, чтобы найти имена библиотек DLL, а затем ищет эти библиотеки DLL. И если ему не удается найти библиотеку DLL, он просто завершается и выдает сообщение об ошибке, в противном случае ОС сопоставляет библиотеку DLL с виртуальное адресное пространство процесса и увеличивает количество ссылок на DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...