Операционная система UNIX. Руководство программиста




Какие функции целесообразно включать в библиотеку?


Включайте большие, часто используемые функции

Они являются основными кандидатами для разделенного использования, которое уменьшит размер выполняемых файлов и сэкономит оперативную память за счет работы нескольких процессов с одним экземпляром подпрограммы. Хорошим примером являются функции семейства printf(3S) из библиотеки языка C (см. Справочник программиста).

Когда мы создавали разделяемую библиотеку языка C...
Функции из семейства printf(3S) используются часто, поэтому мы включили их в разделяемую библиотеку.

Не включайте редко используемые функции

Их включение в библиотеку может уменьшить эффективность работы компьютера, особенно в системах со страничной организацией виртуальной памяти. Выполняемые файлы, созданные без применения разделяемой библиотеки, содержат в себе все необходимые им подпрограммы, а память процесса в какой-то степени соответствует содержимому выполняемого файла. Поэтому, если процесс обращается к функции, велика вероятность того, что она уже находится в оперативной памяти. Если же функция находится в разделяемой библиотеке, она, вероятно, к этому моменту будет вытеснена из оперативной памяти. Вряд ли одному выполняемому файлу понадобится все содержимое разделяемой библиотеки. Если же несколько процессов будут случайным образом вызывать функции библиотеки, интенсивность страничного обмена с диском, скорее всего, возрастет. См. также пункт "увеличивайте локальность обращений".

Когда мы создавали разделяемую библиотеку языка C...

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

Не включайте функции, которым нужно много статических данных

Такие функции увеличивают объем памяти процессов. В разделах Как ОС UNIX работает с разделяемыми библиотеками? и Использовать ли разделяемую библиотеку? отмечалось, что каждый процесс получает свою копию секции данных разделяемой библиотеки, независимо от того, какая ее часть действительно необходима. Данные не используются процессами совместно и не могут предоставляться выборочно.




Содержание  Назад  Вперед