Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Утекает память

11K
18 мая 2005 года
Max Pechersky
2 / / 18.05.2005
Здравствуйте!

Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.

Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.

Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.
991
19 мая 2005 года
Zenhipster
157 / / 14.01.2005
Цитата:
Originally posted by Max Pechersky
Здравствуйте!

Утекает память и не могу понять как. Простенькое многопоточное приложение.
Используются критические секции и ждущие таймеры, нити. В одном функции
память из кучи выделяется в другой освобождается, тут все просто, и мне
кажется что работает правильно.

Необычность (нестандартность) ситуации заключается в следующем: Диспетчер
Задач показывает что процесс моей программы использует "нормальное" количество
памяти не больше не меньше. Но общее количество спользуемой памяти растет,
похоже его съедает система. После выгрузки моей программы количество
используемой памяти резко снижается (на 500 — 1000 Мб), хотя по показанием
того же Диспетчера задач мой процесс занимет 1,5 — 3 Мб.

Работа операциооной системы также сопровождается странностями: попытки запустить
приложения приводят к сообщению " У вас недостаточно прав" итд. После выгрузки моей
программы, странности исчезают.



Попробуй поставить Numega BoundsChecker, и откомпилить программу с ним в режиме отладки. Потом запусти программу и через некоторое время (за которое должны успеть произойти утечки) закрой ее. По завершению работы должно появиться окно с указанием мест в которых произошла утечка.

В свое время, когда я писал под ДОС, мне пришлось делать специальный модуль tDebug, который перегружал операции new / delete (new выделял блок памяти размером size+8, записывал в начало двойное слово - размер блока, а в конец - магическое число, и увеличивал глобальную переменную на size, а delete проверял целостность магического числа, и уменьшал глобальную переменную на size), вел поддержку лог-файла, и еще пару фич. А потом в программе выделялись критические блоки, в начале и конце которых проверялся объем выделенной памяти (с помощью глобальной переменной). В случае многопоточности наверное тоже что нибудь можно придумать. Так, что есть масса способов отловить утечки =)
Кстати, если программа использует левые, непроверенные библиотеки сторонних разработчиков, то вполне возможно, что утечки происходят именно в них.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог