Статическое связывание создает больший исполняемый файл, чем динамическое связывание, потому что оно должно компилировать весь код библиотеки непосредственно в исполняемый файл.Преимущество заключается в уменьшении накладных расходов, поскольку больше не нужно вызывать функции из библиотеки, и где-то от некоторого до заметно более короткого времени загрузки.
Динамически связанный исполняемый файл будет меньше, поскольку он выполняет вызовы во время выполнения для общего кода.библиотеки.В этом есть несколько преимуществ, но важными с точки зрения скорости или оптимизации являются сокращение объема дискового пространства и потребляемой памяти, а также улучшенная многозадачность из-за уменьшенного общего потребления ресурсов (особенно в Windows).
Так что это компромисс: есть аргументы, почему любой из них может быть немного быстрее.Это будет зависеть от множества разных вещей, например, от того, насколько критичные к скорости подпрограммы в программе основаны на вызовах библиотечных функций.Но важный момент, который следует подчеркнуть в приведенном выше утверждении, заключается в том, что он может быть незначительно быстрее. Разница в скорости будет почти незаметной , и ее будет трудно отличить даже от нормальных, ожидаемых колебаний.
Если вам действительно все равно, сравните ее и посмотрите.Но я советую, что это пустая трата времени, и что есть более эффективные и более важные способы увеличить скорость вашего приложения.В долгосрочной перспективе вам будет гораздо лучше, если принять решение «динамически связывать или статически связывать» с учетом других факторов, помимо скорости.Например, статическое связывание может быть целесообразным, если вам нужно упростить развертывание приложения, особенно в различных пользовательских средах.Или, динамическое связывание может быть лучшим вариантом (особенно если эти общие библиотеки не являются вашими собственными), потому что ваше приложение автоматически получит выгоду от обновлений, сделанных для любой из общих библиотек, которые оно вызывает, без необходимости поднимать палец.
РЕДАКТИРОВАТЬ: Microsoft рекомендует, чтобы вы предпочли динамическое связывание вместо статического связывания :
ItНе рекомендуется распространять приложения C / C ++, которые статически связаны с библиотеками Visual C ++.Часто ошибочно считается, что, статически связывая вашу программу с библиотеками Visual C ++, можно значительно улучшить производительность приложения.Однако влияние на производительность динамически загружаемых библиотек Visual C ++ незначительно почти во всех случаях.Кроме того, статическое связывание не позволяет обслуживать приложение и его зависимые библиотеки ни автору приложения, ни Microsoft.Например, рассмотрим приложение, которое статически связано с определенной библиотекой, запущенное на клиентском компьютере с новой версией этой библиотеки.Приложение по-прежнему использует код из предыдущей версии этой библиотеки и не получает преимуществ от улучшений библиотеки, таких как улучшения безопасности.Авторам приложений на C / C ++ настоятельно рекомендуется продумать сценарий обслуживания, прежде чем принимать решение о статической привязке к зависимым библиотекам и использовать динамическое связывание, когда это возможно.