Возможность статических бинарных файлов

Я пытаюсь выяснить последствия распределения, в котором статические двоичные файлы предпочтительнее общих. Для этого я собрал небольшой скрипт оболочки Scala , который 1) пересекает каталоги /bin, /sbin, /usr/bin, /usr/sbin, 2) находит исполняемые файлы, не являющиеся символическими ссылками, и 3) Суммирует размер файла библиотек, перечисленных в ldd. Является ли это осуществимым подходом для вычисления необходимого дополнительного пространства?

Кроме того, что может повлиять на использование памяти во время выполнения? То есть двоичные файлы, скомпилированные для одной и той же разделяемой библиотеки, позволят ядру создавать экземпляр разделяемой библиотеки только один раз во время выполнения. В случае статических двоичных файлов каждый двоичный файл должен будет зарезервировать дополнительную память для той же самой библиотеки. С достаточным количеством пространства подкачки все еще будет проблема? (В конце концов, разве не так работает большинство приложений Windows в пользовательском пространстве?) Есть ли другие потенциальные последствия, которые я мог бы упустить?

4
задан 3 February 2013 в 21:26

1 ответ

Ключевое различие между статическими и общими библиотеками заключается в том, что при использовании статических библиотек каждая программа имеет копию частей библиотеки, которую она использует. В общей библиотеке код хранится отдельно.

Windows, как Linux, использует смесь статически связанных и общих библиотек. В Windows файлы DLL являются общими библиотеками в Linux, библиотеки обычно имеют расширение .so

Программы, написанные со статическими библиотеками, занимают больше места на диске. Кроме того, если две или более работающих программ используют одни и те же библиотечные функции, этот код будет находиться в ОЗУ несколько раз. В зависимости от сложности вызываемых функций это может означать, что используется больше ОЗУ, и поэтому может потребоваться чаще менять пространство. При вызове разделяемой библиотеки возникают накладные расходы, поэтому, если функция достаточно проста, может быть более эффективным с точки зрения оперативной памяти иметь статическую библиотеку.

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

У обоих подходов есть свои преимущества и недостатки.

Больше информации можно найти здесь

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

0
ответ дан 3 February 2013 в 21:26

Другие вопросы по тегам:

Похожие вопросы: