Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.021 c
14-67514
Дмитрий К.К.
2003-04-04 06:20
2003.04.21
Именинники 4 апреля


9-67070
Juss
2002-11-21 18:59
2003.04.21
Помогите сделать карту


8-67391
kpo
2003-01-19 13:39
2003.04.21
вставка flash ролика


3-67094
Fiend
2003-04-02 14:21
2003.04.21
кодировка в FireBird


6-67433
Maestro1
2003-02-27 10:48
2003.04.21
Доступ к серверу удаленного доступа с помощью модема





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский