В DLL есть две накладные расходы. Во-первых, поскольку DLL загружается в память, внутренние адреса должны быть исправлены для фактического адреса, на который загружена DLL, по сравнению с адресами, принятыми компоновщиком. Это можно свести к минимуму путем повторного базирования библиотек DLL. Второе накладное время - это когда загружаются программа и DLL, поскольку вызовы программы в DLL имеют адреса заполненных функций. Эти накладные расходы, как правило, незначительны, за исключением очень больших программ и DLL.
Если это действительно актуально, вы можете использовать загруженные с задержкой библиотеки DLL, которые загружаются только при их вызове. Если DLL никогда не используется, например, она реализует очень необычную функцию, то она никогда не загружается вообще. Недостатком является то, что при первом вызове DLL существует небольшая задержка.
Мне нравится использовать статически связанные библиотеки, а не уменьшать накладные расходы, но свести к минимуму необходимость поддерживать DLL в программе.
Не совсем верно, в обычном случае адреса функций фиксируются по мере загрузки программы, а не во время выполнения. Комментарий об оптимизации всей программы мертв, но я не видел никакой информации о том, насколько она действительно полезна. –
@Mark: Да, я мог бы подумать о загружаемых с задержкой DLL ... в любом случае, фактические накладные расходы сами по себе малы в любом случае ... –