2014-04-28 2 views
0

DLL загружаются только один раз. Динамический загрузчик свяжет и перенаправляет вызовы, если ваше приложение начнет использовать определенную DLL, например, из MS-Office.Загрузка DLL и системное пространство изображения

Однако, КОГДА ли повторная ссылка DLL для разных пользователей и приложений, в системе нажимают DLL-изображение в системное пространство, чтобы ВСЕ приложения могли его использовать?

В противном случае сохраняется ли загруженное изображение в пользовательском пространстве?

Принимая во внимание: Все приложения на самом деле смотреть на ОДНОМ 2gb пространстве системы, и это виртуализировать для них виртуальной адресации,

ИЛИ ли компоновщик всегда загружать DLLS в пространство ядра, так что все приложения могут использовать их.

ответ

2

DLL только когда-либо загружается один раз.

Неправильное использование. Они отображаются в виртуальное адресное пространство, когда процесс запускается загрузчиком операционной системы или когда вы запрашиваете его через функции API, такие как LoadLibrary. Каждый процесс получает новую копию, и DLL инициализируется каждый раз, когда это происходит.

Не существует глобального «системного пространства», которое все процессы используют одновременно. Каждый процесс имеет свой собственный виртуальный диапазон адресов (который составляет 4 ГБ с нормально используемой памятью 2 ГБ на 32-битной Windows). Если вы перезаписываете части DLL в своей виртуальной памяти, копии DLL в других процессах не будут затронуты. Один процесс может легко разрушить всю систему, если бы это было не так.

Смежные вопросы