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