Статическая и динамическая линковки
Представим ситуацию, что у меня есть некоторый проект, который имеет в зависимостях lib ssl, crypto, m, rt и прочее. Есть ли какая-нибудь разница в производительности программы, когда я использую статическое/динамическое связывание?
Ответы (1 шт):
Теоретически, при статической линковке линковщик может сделать некоторые оптимизации (заинлайнить функции). Но делает ли кто то такие оптимизации - вряд ли.
Но все таки, обычно при статической линковке обычно подставляются реальные адреса функций с библиотек, а вот при динамической - через прослойку - то есть, вначале по индексу в таблице функций находится адрес, а потом уже по нему делается вызов. Если таких вызовов много, то вполне может быть измеряемая разница.
С другой стороны, многие динамические библиотеки уже есть в памяти и их не нужно подгружать в память (да, операционные системы очень хорошо оптимизируют подгрузку исполнимого кода в память), поэтому, старт приложения бывает быстрее при динамической линковке.
Возвращаясь к изначальному вопросу. В каждом конкретном случае ответ будет разным. И правильный ответ - профайлер.