Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exe, dll и все-все-все..., или


Cobalt ©   (2001-11-27 23:42:00) 

Вопрос навеян работой с различными функциями...

1) Енумерую я что-либо(например имена ресурсов в модуле), указываю callback-функцию, которая получает в качестве одного из параметров - PChar;)
Память, выделенная под эту строку - находится в моём сегменте данных? (Ну, наверное - если не Access Violation)
А вот память эту выделяет dll-ка(типа, user.dll). При помощи какого менеджера памяти - дельфийского? Или какого-то своего, системного?

2) Кажная прога(подразумевается один процесс и поток) при загрузке получает один сегмент данных, один сегмент кода и стек. (Правильно?)
Когда прога загружает(динамически) dll-ку, то в адресное пространство(кода) добавляется кусок кода dll-ки, ей выделяется собственный сегмент данных и стек.(Или тоже добавляются к существующему?)
Когда dll-ка выгружается, то код освобождается точно, а вот сегмент данных?
Что происходит с памятью, динамически выделенной в функциях dll-ки?


paul_shmakov   (2001-11-28 02:41:00) [1]

когда загружается процесс для него создается виртуальное адресное пространство (4Гб). большая часть этого пространства свободна (free), часть зарезервирована (reserved) (т.е. физическая память (озу или своп-файл) под нее не отдана), часть сопоставлена с физической памятью (commited).
в это же адресное пространство загружаются все dll (и статически загруженные, и динамически).
каждому потоку выделяется свой личный стек. именно потоку, а не процессу или dll.

теперь конкретно по вопросам.
1) "При помощи какого менеджера памяти - дельфийского? Или какого-то своего, системного?"
своего. хотя свой вполне может оказаться дельфийским, если dll написана на delphi :) но в любом случае, dll может выделять память так, как ей в голову взбредет. и не стоит по этому поводу делать каких-либо предположений.

2) на большую часть я уже ответил.
"Что происходит с памятью, динамически выделенной в функциях dll-ки?"
если dll при своей выгрузке эту память не освободила, то память не будет освобождена до завершения процесса.


Наверх

Титульная страница Поиск, карта сайта Написать письмо