Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделенная в DLL память 
:(
    Опции темы
wasya
Дата 5.5.2005, 13:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите пожалуйста!!!!
Памать которая выделяется в DLL, может освобождаться приложением с которым динамически связана эта DLL ??? smile smile smile
  Вверх
oleg1973
Дата 5.5.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



если знать хедер того самого куска памяти который был выделен то нет проблем в контексте одного процесса


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 7.5.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 1
Всего: 41



Цитата(oleg1973 @ 5.5.2005, 10:57)
если знать хедер того самого куска памяти который был выделен то нет проблем в контексте одного процесса


Проблема может быть. Зависит от того, какими средствами выделять/освобождать память. Если это стандартные библиотеки языка (типа new/delete), то менеджеры памяти реализованное этими библиотеками у dll и еxe вполне могут оказаться разными - вот тут-то проблемка и возникнет.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Nastya
Дата 10.5.2005, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 1
Всего: 44



Цитата
Проблема может быть. Зависит от того, какими средствами выделять/освобождать память. Если это стандартные библиотеки языка (типа new/delete), то менеджеры памяти реализованное этими библиотеками у dll и еxe вполне могут оказаться разными - вот тут-то проблемка и возникнет.

А можно подробнее, про проблемку, которая может возникнтуть?
И в чем прикол разной реализации new/delete? (зачем это сделано)?

А еще лучше статейку по этому поводу скинь. smile



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
oleg1973
Дата 10.5.2005, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



проверяли
все одно сводится к GlobalAlloc ей подобной )))


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 11.5.2005, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 1
Всего: 41



Цитата(oleg1973 @ 10.5.2005, 07:21)
проверяли
все одно сводится к GlobalAlloc ей подобной


Она может и сводиться, но управление куском памяти выделенной этой GlobalAlloc может производиться по разному. Я, лично, в исходниках не смотрел, может там и все нормально, но от компилятора к компилятору (и даже от версии к версии) это может меняться.

Цитата(Nastya @ 10.5.2005, 05:46)
А можно подробнее, про проблемку, которая может возникнтуть?
И в чем прикол разной реализации new/delete? (зачем это сделано)?


Прикол в том, что встроенный менеджер памяти может управлять выделением и возвращением памяти не на столько очевидно, как нам может казаться из кода. Например менеджер может не обращаться каждый раз (при каждом вызове new) к системе за выделением памяти, а выделять сразу большой кусок и от него помаленьку раздавать. Тогда и delete не будет физически отчищать память, а возвращать ее менеджеру. В этом случае если память выделенна одним менеджером, а вернута другому, то первый навсегда потеряет этот кусок, а второй будет очень удивлен что ему вернули память, которую он не выделял.

Я исходники VC не смотрел, поэтому не гарантирую, что там что-то типа этого реализованно. Кроме того грамотно реализованный менеджер может находить уже дейсвующий экземпляр и с ним договариваться даже если они разнесены по разным модулям. С другой стороны, любой программист может реализовать свой менеджмент памяти путем перегрузки операторов new/delete и в этом случае может возникнуть та же проблема. То есть проблема може возникнуть, а может и не возникнуть. Но, хороший стиль программирования подразумевает, что тот модуль который выделяет память должен ее же и освобождать. Если только не реализованно сотвествующее управление памятью чтобы этого избежать.







--------------------
Волны гасят ветер...
PM MAIL   Вверх
Nastya
Дата 13.5.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 1
Всего: 44



Спасибо


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.