Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Linux-инструменты для Windows-программистов
Назад Компиляция и сборка приложений Вперед

Некоторые сравнения

Одинаково ли по производительности выполняются процессы, собранные со своими объектными модулями статически и динамически? Нет! И дело здесь не в том, что вызовы динамически связываемых функций будут иметь некоторый уровень косвенности через таблицы имён — это копейки... Существенно то, что объектные модули для помещения в динамическую библиотеку должны компилироваться с опцией «позиционно независимый код» (ключ -fpic), а такой код сложнее, менее производительный и хуже подлежит оптимизации компилятором. В результате может быть некоторая потеря производительности. Обычно это мало заметно, но в некоторых областях, особенно в алгоритмах цифровой обработки сигналов (digital signal processing - DSP: быстрые преобразования Фурье, авторегрессионные фильтры, кодаки ... и многое другое) это может стать существенным.

Относительно расходования памяти. Естественно, динамические библиотеки гораздо экономичнее расходуют память за счёт исключения дублирования кода. Но это происходит, если размер библиотеки поддерживается разумно небольшой, и в одну библиотеку не наталкивается всё, что только можно придумать: если программе нужен хотя бы единый вызов из библиотеки, то загружается вся библиотека. Кроме того, не следует забывать, что хотя для N программ, использующих динамическую библиотеку, загружается и одна копия самой библиотеки, но с каждым из N процессов загружается таблица имён используемой библиотеки, то есть, в итоге, загружается N экземпляров таблицы. При объёмных библиотеках это может быть существенная величина.

Для экономной работы с памятью (особо для встраиваемых и малых архитектур) может оказаться перспективным обсуждавшийся ранее способ загрузки библиотек по требованию: обширная библиотека щепится на несколько более мелких, и каждая из них загружается только на период времени её прямого использования. Таким образом библиотеки могут поочерёдно грузиться в одну и ту же область памяти, что реализует схему оверлейной загрузки фрагментов кода.


Предыдущий раздел: Оглавление Следующий раздел:
Данные в динамической библиотеке   Создание проектов, сборка make