Поделиться через


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

Динамическое связывание имеет следующие преимущества по сравнению со статическим связыванием.

  • Несколько процессов, которые загружают одну библиотеку DLL по одному базовому адресу, совместно используют одну копию библиотеки DLL в физической памяти. Это позволяет сэкономить системную память и сократить переключение.
  • При изменении функций в библиотеке DLL приложения, которые их используют, не нужно перекомпилировать или перекомпилировать, пока аргументы функции, соглашения о вызовах и возвращаемые значения не изменяются. В отличие от этого, статически связанный объектный код требует повторного связывания приложения при изменении функций.
  • Библиотека DLL может предоставлять поддержку после вывода на рынок. Например, библиотеку DLL драйвера отображения можно изменить для поддержки дисплея, который был недоступен на момент первоначальной поставки приложения.
  • Программы, написанные на разных языках программирования, могут вызывать одну и ту же функцию DLL, если программы следуют тому же соглашению о вызовах, которое использует функция. Соглашение о вызовах (например, C, Pascal или стандартный вызов) управляет порядком, в котором вызывающая функция должна отправлять аргументы в стек, отвечает ли функция или вызывающая функция за очистку стека и передаются ли какие-либо аргументы в регистры. Дополнительные сведения см. в документации по компилятору.

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