вторник, 14 июля 2015 г.

Как используется оперативная память при статической и динамической линковке библиотек


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



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

Теперь же рассмотрим динамическое линкование. Дела обстоят совсем по-другому:



Как видно из рисунка, программа, использующая динамическую линковку, создает только копии модифицируемых глобальных переменных библиотеки ("library data"), а непосредственно код библиотек ("library code") не копирует, а использует тот, что уже загружен в память, используя отображение (mapping) адресов функций из виртуального адресного пространства на физические адреса функций загруженной в память библиотеки. И каждая программа, вызывая функции динамически линкованной библиотеки, использует одни и те же физические адреса, что позволяет экономить память.

Подробнее здесь.