Каковы сходства и различия между динамической загрузкой и поздним связыванием? - PullRequest
0 голосов
/ 29 июля 2011

Из википедии:

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

Позднее связывание - это механизм компьютерного программирования, в котором метод, вызываемый для объекта, ищется по имени во время выполнения.


На мой взгляд,

Сходство в том, что они оба механизма, в котором методы ищутся во время выполнения.

Разница в том, что динамическая загрузка не требует использования компоновщика после загрузки библиотеки во время выполнения, но при поздней привязке всегда нужен компоновщик.

Я не уверен, что я прав, особенно в части различия. Я хотел бы узнать больше из вашего анализа.

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Позднее связывание, как и при избыточной фиксации, - это хак, чтобы выжать некоторые дополнительные преимущества (допуск производительности / памяти) за счет корректности и возможного позднего катастрофического сбоя.

Без позднего связывания, динамическая загрузка модулейбудет успешным, только если все символы, необходимые для перемещения, могут быть разрешены во время загрузки, и вы получите значимую ошибку, из которой вы можете исправить, если они не могут быть решены.При позднем связывании динамическая загрузка практически всегда «завершается успешно», а затем может привести к сбою вашей программы позже, когда динамически загруженный модуль пытается сослаться на символ, который не может быть разрешен.

0 голосов
/ 29 июля 2011

Насколько я понимаю, динамическая загрузка является более низким уровнем, чем поздняя привязка. Таким образом, вызов функции с поздним связыванием выглядит и выглядит как обычный вызов функции, за исключением того, что если библиотека отсутствует, приложение завершается при попытке вызова, а не при запуске приложения, в то время как для динамической загрузки необходимо написать больше кода. но вы можете выполнять обработку ошибок, например вызывать резервный метод.

...