Загружаю Dll'ку функцией LoadLibrary(), в диспетчере задач объем памяти занимаемый приложением увеличивается на 40 Кб, далее вызываю FreeLibrary() память высвобождается но в объеме 36 Кб, если далее загружать и выгружать Dll, то память будет утекать по 4 Кб. Есть предположение, что каждый раз при первом вызове LoadLibrary(), в куче процесса создается новый счетчик числа пользователей библиотеки. Объясните суть этого явления и есть ли способ избежать постоянной потери этих 4 Кб памяти
Здравствуйте, ilyatar, Вы писали:
I>Можно, но библиотек возможно будет очень много и я не знаю сколько потребуется пользователю во время работы, а оставлять все в памяти нехочется.
Если не выгружать, то LoadLibrary, как я помню будет просто возвращать тот же HANDLE. Проблема, что пользователь может по разу вызвать 10^n библиотек? или, что 10^n раз одну из 10^2n — тогда можно просто не выгружать.
Здравствуйте, raskin, Вы писали:
R>Если не выгружать, то LoadLibrary, как я помню будет просто возвращать тот же HANDLE. Проблема, что пользователь может по разу вызвать 10^n библиотек? или, что 10^n раз одну из 10^2n — тогда можно просто не выгружать.
Вызвать он сможет только один раз одну библиотеку, а когда надобность в ней отпадет, планировалось выгрузить ее из памяти, поскольку пользователь однозначно будет работать с другой библиотекой.
Попутно возник еще один вопрос, а если dll использует пакеты, то как они загружаются и выгружаются при явном связывании dll и приложения?