Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизDLL Найти похожие ветки
← →
Top Gun (2003-04-04 22:03) [0]Вот читаю, читаю про DLL... вроде все понятно, кроме ее загрузки. Никак не въеду.
Цитирую:
"Библиотека DLL сначала загружается в глобальную распределяемую память (heap) системы Win32, а затем отображается на адресное пространство вызывающего процесса...[skip]... Поэтому, когда одна и та же библиотека DLL загружается сразу несколькими процесссами, каждый их них получает собственный образ (image) данной библиотеки. Следовательно, процессы не используют одновременно один и тот же физический код, данные или ресурсы, как это было в 16-разрядной Windows."
Но в тоже время пишется:
"Вышесказанное вовсе не означает, что, когда несколько процессов загружает одну и ту же библиотеку DLL, физическая память расходуется на хранение всех необходимых ее копий"
Что-то никак не пойму. Значит, физически в памяти библиотека одна. Но в тоже время все процессы работают со своей копией. В голове как-то не укладывается.
Возможно, отгадка заключается в том, что она каким-то хитрым образом "отображается на адресное пространство вызывающего процесса" - не понимаю этого. Что тогда значит отображается? Расскажите пожалуйста.
← →
___ALex___ (2003-04-05 00:45) [1]все процессы работают с одним кодом DLL но с разными данными
← →
___ALex___ (2003-04-05 03:02) [2]советую почитать про механизм виртуальной памяти
← →
Top Gun (2003-04-05 14:19) [3]То есть, если в DLL используется некая переменная, то для каждого вызова DLL будет создан свой экземпляр ?
to ___ALex___
а где почитать про механизм виртуальной памяти ?
← →
MBo (2003-04-05 14:54) [4]>некая переменная, то для каждого вызова DLL будет создан свой экземпляр
Да - локальные переменные процедур и функций размещаются в стеке, который принадлежит потоку (thread), память под который, в свою очередь, выделяется из ВАП (виртуального адресного пространства) процесса.
← →
Top Gun (2003-04-07 19:31) [5]Так, почитал про ВАП. Немного понял, но выражение "отображается на адресное пространство вызывающего процесса" до конца не осмыслил.
То есть, код библиотеки загружается в виртуальную память процесса (4Gb). Но физически ничего не загружается, верно? Это как зарезервировать память фукцией VirtualAlloc - физически ничего не выделяется?
Но тем не менее, это отображение библиотеки, то есть, процесс обратившись к библиотеке загруженной в его ВАП на самом деле обратится к единственной копии библиотеки находящейся в heap памяти? Я верно понимаю? Только переменные используемые в библиотеке для каждого процесса будут свои и они хранятся в ВАП процесса ?
← →
Иван Шихалев (2003-04-07 22:17) [6]
> Но тем не менее, это отображение библиотеки, то есть, процесс
> обратившись к библиотеке загруженной в его ВАП на самом
> деле обратится к единственной копии библиотеки находящейся
> в heap памяти? Я верно понимаю? Только переменные используемые
> в библиотеке для каждого процесса будут свои и они хранятся
> в ВАП процесса ?
Истинно так.
← →
Top Gun (2003-04-08 18:43) [7]1) И для переменных библиотеки, хранящихся в ВАП вызвавшего процесса будет уже выделена физическая память?
2) В отличии от кода библиотеки, который занимает ВАП процесса, но для которого не выделен физический участок памяти?
3) Если все правильно - то получается для каждого "экземпляра" библиотеки создаются свои переменные. Код один и тот же.
А остальное тоже общее или раздельное?
4) Это все есть в книге Рихтера по Win32 ?
← →
sts (2003-04-08 20:35) [8]Да, есть, а сама книга на http://anatolix.naumen.ru/win32books.htm
← →
Top Gun (2003-04-08 20:58) [9]А первые три вопроса ?
← →
Cobalt (2003-04-09 00:31) [10]1) Соответственно, в стеке, или в сегменте данных
2) Ты неправильно понимаешь разделение кода - " физический" кусок памяти для кода выделяется только при первой загрузке ДЛЛ, при последующих загрузках, за счет виртуальности памяти, т.е. "логические" страницы памяти разных процессов ссылаются в таблице страниц на одну и ту же физическую страницу(за счет того, что код не может модифицироваться(точнее, это не так-то просто сделать, хоть и можно))
3) Да, но что ты подразумеваешь под "остальным"
← →
Top Gun (2003-04-09 18:48) [11]Cobaltm, ресурсы, например.
← →
Cobalt (2003-04-09 19:15) [12]Все, что не может измениться - общее.
Все, что может (и будет) изменяться - раздельное.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c