1. динамически подключаемые библиотеки;
2. о динамически подключаемых библиотеках подробнее.
Перевод с английского статьи от 31.05.2018 г. «Advantages of Dynamic Linking»:
https://docs.microsoft.com/ru-ru/windows/win32/dlls/advantages-of-dynamic-linking
(На данный момент на этом сайте нет перевода этой статьи на русский, есть только версия на английском.)
Динамическое связывание имеет следующие преимущества перед статическим связыванием:
- множество процессов, загрузивших одну и ту же DLL в один и тот же базовый адрес [виртуального адресного пространства каждого из процессов], будет совместно использовать единственную копию DLL в физической памяти. Такой подход экономит [оперативную] память [операционной] системы и уменьшает необходимость в подкачке страниц [swapping];
- когда модернизируются функции в DLL, приложения, которые используют эти функции, не потребуют перекомпиляции или перекомпоновки, если аргументы этих функций, соглашения об их вызовах и возвращаемые значения не будут изменены. Статическое же связывание объектного кода при модернизации библиотечных функций, наоборот, потребует перекомпоновки приложения;
- DLL может послужить инструментом послепродажной поддержки. Например, DLL драйвера дисплея может быть модернизирована для работы с дисплеем, который не был доступен на момент первоначальной поставки приложения;
- программы, написанные на разных языках программирования, могут вызывать одну и ту же функцию одной и той же DLL, если эти программы соблюдают то же соглашение о вызове, которое эта функция использует. Соглашение о вызове (такое, как
cdecl
,pascal
илиstdcall
) определяет порядок, в котором вызывающая функция должна поместить аргументы в стек; определяет, кто несет ответственность за очистку стека: вызываемая функция или вызывающая функция; определяет, передаются ли какие-либо аргументы в регистры [процессора]. Для получения более подробной информации по этому вопросу следует обратиться к документации компилятора.