Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Вниз

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


Cobalt   (2001-11-27 23:42) [0]

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

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

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



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

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

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

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




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.029 c
6-90348           evgen_2001            2001-11-05 16:10  2002.01.28  
Передача структуры по сокету


1-90306           ProfiUgl              2002-01-11 11:09  2002.01.28  
Помогите разобраться с COM сервером


1-90279           ФДДДД                 2002-01-10 12:37  2002.01.28  
ПОМОГИТЕ ПЛИЗЗ, СРОЧНО!


6-90346           ddd-numerical TV      2001-11-05 15:12  2002.01.28  
Webserver написать...


7-90386           vik                   2001-10-06 14:47  2002.01.28  
Как отформатировать HDD