какой из них рекомендуется: использование статической библиотеки против динамической библиотеки (общий объект)

Я работаю с приложением в Linux. Он поддерживает как статические, так и динамические (.so) версии.

С точки зрения производительности, какую версию должен использовать пользователь? Приложение выполняет вычислительные задачи, требующие нескольких часов процессорного времени.

Любое другое преимущество использования одной библиотеки над другой?

Спасибо


person memC    schedule 02.02.2010    source источник
comment
Также см. соответствующий вопрос по адресу: stackoverflow.com/questions/2025455/   -  person sateesh    schedule 02.02.2010


Ответы (4)


С точки зрения производительности:

Общие объекты компилируются как PIC (позиционно-независимый код), который теоретически может быть немного менее эффективным, чем обычный код на некоторых архитектурах (включая x86).

Тем не менее, я не думаю, что это будет иметь какое-то реальное значение.

Из любых других точек

Используйте общий объект, у него слишком много преимуществ по сравнению со статической библиотекой, что это просто лучшая альтернатива.

person Artyom    schedule 02.02.2010

С точки зрения производительности различия минимальны, если динамическая библиотека не будет часто загружаться и выгружаться.

Единственное отличие состоит в том, что динамическая библиотека загружается по мере необходимости, а не встроена (и, следовательно, всегда присутствует без времени загрузки) в ваш исполняемый файл.

Динамическая библиотека также может быть повторно использована несколькими исполняемыми файлами. Это основная причина, по которой я использовал динамические библиотеки в прошлом.

person antik    schedule 02.02.2010

Обычно вы используете динамическую библиотеку, чтобы уменьшить размер двоичного файла. Никаких штрафов во время выполнения, за исключением запуска приложения, что, вероятно, не имеет значения.

person user231967    schedule 02.02.2010
comment
У динамических библиотек есть еще одно преимущество: они позволяют изменять функции (т. е. применять исправления) без перекомпиляции всех программ, использующих эту функцию. - person Morfildur; 02.02.2010

Обычно статически связанные библиотеки работают быстрее, поскольку у них нет накладных расходов на поиск и загрузку библиотеки, но: для многочасовой программы разница в производительности должна быть слишком мала, чтобы ее можно было заметить.

В любом случае, единственный способ быть действительно уверенным: сравнить его самостоятельно.

person Morfildur    schedule 02.02.2010