Junior
95
questionbank

В чем различия между статическими и динамическими библиотеками?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech
ПризнакСтатическая библиотека (.lib/.a)Динамическая библиотека (.dll/.so)
СвязываниеКод библиотеки копируется в исполняемый файл во время компиляции.Код библиотеки загружается в память при запуске или во время выполнения программы.
Размер.Увеличивает размер исполняемого файла программы.Не влияет на размер исполняемого файла программы.
ОбновлениеТребует перекомпиляции программы для обновления функциональности.Можно обновить или заменить без пересборки программы.
ЗависимостиВсе зависимости включаются в исполняемый файл.Разделяет зависимости между несколькими программами.
ПамятьКаждая программа имеет свою копию кода библиотеки в памяти.Несколько программ могут использовать одну копию библиотеки в памяти.
ВерсионированиеСложно управлять разными версиями одной библиотеки.Упрощается управление версиями (DLL Hell - потенциальная проблема).
Производительность (запуск)Обычно быстрее запускается, так как код уже загружен.Может задерживаться при первом запуске из-за динамической загрузки.
ПримерыСтандартные библиотеки C/C++ (иногда можно статически линковать).Большинство современных системных библиотек, библиотеки GUI.

Статическая линковка (пример):

c
c
c

При компиляции main.cpp, код функции add из static_lib.cpp будет включен непосредственно в исполняемый файл.

Динамическая линковка (пример):

c
c
c

В этом примере, программа main загружает библиотеку dynamic_lib.dll (или dynamic_lib.so) во время выполнения и вызывает функцию add через указатель.