Будет ли полная библиотека загружаться в память (RAM) при выполнении программы?

0

Как это будет отличаться в случае статической и динамической библиотеки?

У меня есть понимание статического и динамического создания и использования библиотеки, но у меня есть сомнения относительно загрузки библиотеки в первичную память. будет ли статическая/динамическая библиотека полностью загружена в ОЗУ, если мы вызываем только одну функцию из библиотеки.

например, считаем, что мы имеем библиотеку размером 10 МБ, и мы вызываем только одну функцию из этой библиотеки, будет ли загружена полная библиотека или будет загружен только код объекта вызываемой функции? и является ли он одним и тем же в случае статической и динамической библиотеки? (если мы используем исполняемый размер статической библиотеки, будет больше, но как насчет времени загрузки)

заранее спасибо!

  • 0
    эти общие библиотеки являются общими для всей системы. поэтому все сотни программ используют одну и ту же математическую библиотеку, но она отображается в памяти только один раз. я не стал бы беспокоиться о чем-то подобном, если библиотека является общей
  • 0
    С другой стороны, статические библиотеки оптимально связаны между собой, поэтому в исполняемый файл при компиляции добавляется только наименьшее количество необходимых .o изнутри .a.
Показать ещё 2 комментария
Теги:

2 ответа

6

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

Эти задачи в основном делегируются динамическому загрузчику пользовательского режима.

Части ваших изображений, которые никогда не были написаны или не были впоследствии переведены KSM (Merner Samepage Merger), могут храниться только один раз, уменьшая давление памяти.

3

Когда требуется динамическое связывание, ядро загружает динамический компоновщик (ELF-интерпретатор), который инициализирует себя, а затем загружает указанные общие объекты (если они уже не загружены).

IBM: динамические библиотеки анатомии Linux

Ещё вопросы

Сообщество Overcoder
Наверх
Меню