Поскольку динамически связанные библиотеки должны быть разрешены во время выполнения, статически связаны исполняемые файлы быстрее, чем динамически связанные исполняемые файлы?
Является ли статически связанный исполняемый файл быстрее, чем динамически связанный исполняемый файл?
Ответ 1
Статическая компоновка создает более крупный исполняемый файл, чем динамическая компоновка, потому что он должен скомпилировать весь код библиотеки непосредственно в исполняемый файл. Преимуществом является сокращение накладных расходов, из-за того, что больше не нужно вызывать функции из библиотеки и где-то от нескольких до значительно более быстрого времени загрузки.
Динамически связанный исполняемый файл будет меньше, поскольку он помещает вызовы во время выполнения в библиотеки общего кода. Для этого есть несколько преимуществ, но важными с точки зрения скорости или оптимизации являются сокращение объема дискового пространства и потребляемой памяти и улучшенная многозадачность из-за сокращения общего потребления ресурсов (особенно в Windows).
Итак, это компромисс: есть аргументы, которые могут быть сделаны, потому что один может быть немного быстрее. Это будет зависеть от множества других вещей, например, насколько критичные по скорости процедуры в программе полагаются на вызовы функций библиотеки. Но важным моментом, который следует подчеркнуть в приведенном выше заявлении, является то, что он может быть немного быстрее. Разница в скорости будет почти незаметной и трудно отличить даже от нормальных ожидаемых колебаний.
Если вам действительно все равно, сравните его и посмотрите. Но я советую, что это пустая трата времени, и что есть более эффективные и более важные способы увеличить скорость вашего приложения. В долгосрочной перспективе вам будет намного лучше, учитывая факторы, отличные от скорости, когда вы решите "динамически связать или статически связать" решение. Например, статические ссылки могут быть рассмотрены, если вам нужно упростить развертывание приложения, особенно в различных пользовательских средах. Или динамическая компоновка может быть лучшим вариантом (особенно если эти общие библиотеки не являются вашими собственными), потому что ваше приложение автоматически воспользуется преимуществами обновлений, сделанных в любой из разделяемых библиотек, которые он вызывает, без необходимости поднимать палец.
РЕДАКТИРОВАТЬ: Корпорация Майкрософт рекомендует, чтобы вы предпочитали динамическое связывание по статической ссылке:
Не рекомендуется перераспределять Приложения C/С++, которые статически ссылку на библиотеки Visual С++. это часто ошибочно полагали, что статическая привязка вашей программы к Библиотеки Visual С++ можно значительно улучшить производительность приложения. Однако воздействие на динамическую загрузку Библиотеки Visual С++ незначительны почти во всех случаях. Более того, статическая связь не позволяет обслуживание приложения и его зависимых библиотек либо автора приложения или Microsoft. Для Например, рассмотрите приложение, которое статически связана с конкретным библиотека, работающая на клиентском компьютере с новой версией этой библиотеки. Приложение по-прежнему использует код из предыдущая версия этой библиотеки, и не пользуется библиотекой улучшения, такие как безопасность усовершенствования. Авторы C/С++ приложениям настоятельно рекомендуется продумать сценарий обслуживания прежде чем принять решение о зависимых библиотек и использовать динамические связывая по возможности.
Ответ 2
Это зависит от состояния вашего диска и от того, могут ли библиотеки DLL использоваться в других процессах. Холодное начало происходит, когда ваша программа и ее библиотеки DLL никогда не загружались раньше. EXE без DLL имеет более быстрый холодный старт, так как нужно найти только один файл. У вас должен быть сильно фрагментированный диск, который почти заполнен, чтобы не иметь этого случая.
DLL может начать окупаться, когда она уже загружена в другой процесс. Теперь кодовые страницы DLL просто разделяются, издержки на запуск очень низки, а использование памяти является эффективным.
Несколько похожий случай - это теплый старт, запуск, когда DLL по-прежнему доступна в кеше файловой системы с предыдущего использования. Разница между холодным и теплым стартом может быть довольно значительной на медленном диске. Единственная причина, по которой всем нравится SSD.