освобождение памяти
От: akvakh  
Дата: 28.04.05 17:12
Оценка:
Добрый день.
Проблема заключается в следующем:
при работе программы постоянно создаются и удаляются объекты.
но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
Можно ли как-нибудь заставить систему принудительно освобождать память?
Re: освобождение памяти
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 28.04.05 17:17
Оценка:
Здравствуйте, akvakh, Вы писали:

A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается


Как-то все у вас загадочно-загадочно...
Чего за объекты? Как создаются? Как удаляются? Желательно на разговорном C++.
HgLab: Mercurial Server and Repository Management for Windows
Re: освобождение памяти
От: ScorpZ Украина  
Дата: 28.04.05 17:53
Оценка:
Здравствуйте, akvakh, Вы писали:

A>Добрый день.

A>Проблема заключается в следующем:
A>при работе программы постоянно создаются и удаляются объекты.
A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
A>Можно ли как-нибудь заставить систему принудительно освобождать память?

Просмотри что бы для каждого выделения памяти под объект , после использования шло ее высвобождение .
Например — для new — delete; для new [] — delete [] .
Re: освобождение памяти
От: Кодт Россия  
Дата: 28.04.05 18:36
Оценка:
Здравствуйте, akvakh, Вы писали:

A>Добрый день.

A>Проблема заключается в следующем:
A>при работе программы постоянно создаются и удаляются объекты.
A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
A>Можно ли как-нибудь заставить систему принудительно освобождать память?

Можно предложить поотлаживаться под BoundsChecker'ом.
Посмотришь, где у тебя утечки.

Причиной могут быть как ошибки в программе, так и неправильно слинкованные CRT. (Проверь это в первую очередь: если есть несколько DLL, разделяющих объекты между собой — они все должны использовать одинаковую CRT DLL — а не статическую).
Перекуём баги на фичи!
Re: освобождение памяти
От: Аноним  
Дата: 28.04.05 18:37
Оценка: :))
Здравствуйте, akvakh, Вы писали:

A>Добрый день.

A>Проблема заключается в следующем:
A>при работе программы постоянно создаются и удаляются объекты.
A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
A>Можно ли как-нибудь заставить систему принудительно освобождать память?

Это называется memory leak
Не ты первый и не ты последний с такой проблемой.
BoundsChecker тебе может помочь.

А вообще на чем пишешь то?
На С++ хоть?
Re: освобождение памяти
От: SeRya Россия http://home.onego.ru/~ryazanov/
Дата: 29.04.05 06:55
Оценка:
Здравствуйте, akvakh, Вы писали:

A>Добрый день.

A>Проблема заключается в следующем:
A>при работе программы постоянно создаются и удаляются объекты.
A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
A>Можно ли как-нибудь заставить систему принудительно освобождать память?

Нечто подобное я наблюдал при использовании MFC. Методы вроде FromHandle создают временные объекты, которые уничтожаются в OnIdle. Последний блокируется при открытии модального диалога.

Нет ничего более постоянного, чем временное...

А еще я бы попытался выяснить, какого типа объекты накапливаются, если у блоков памяти что-то общее (например, одинаковый размер или ссылка на таллицу виртуальных методов).
Re[2]: освобождение памяти
От: Кодт Россия  
Дата: 29.04.05 08:52
Оценка:
Здравствуйте, SeRya, Вы писали:

SR>Нечто подобное я наблюдал при использовании MFC. Методы вроде FromHandle создают временные объекты, которые уничтожаются в OnIdle. Последний блокируется при открытии модального диалога.


Ну так ведь он разблокируется по закрытию диалога.
Хотя... Если программа — это MFC Dialog-based, то именно такое поведение и произойдёт.

Как-то этот кэш можно сбросить. MSDN почитать...

Но с другой стороны, а что это за прога, которая интенсивно терзает всё время разные хэндлы окон и GDI?
Может быть, и в этой части есть утечка.
Перекуём баги на фичи!
Re: освобождение памяти
От: Mr.Chipset Россия http://merlinko.com
Дата: 29.04.05 11:17
Оценка:
Здравствуйте, akvakh, Вы писали:

A>Добрый день.

A>Проблема заключается в следующем:
A>при работе программы постоянно создаются и удаляются объекты.
A>но после их удаления память от них (по показаниям task maanger'а) не освобождается. Память растет-растет, система начинает ругаться на нехватку виртуальной памяти, и программа может накрыться. помогает только сворачивание окна, после чего лишняя память сразу освобождается
A>Можно ли как-нибудь заставить систему принудительно освобождать память?

STL используешь?
Вообще, неплохо бы код показать
... <<А писал я весь этот бред на RSDN@Home 1.1.4 beta 5 rev. 411, под звуки Unknown — Track 3 >>
"Всё что не убивает нас, делает нас сильнее..."
Re[2]: освобождение памяти
От: akvakh  
Дата: 30.04.05 14:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это называется memory leak

А>Не ты первый и не ты последний с такой проблемой.
А>BoundsChecker тебе может помочь.

А>А вообще на чем пишешь то?

А>На С++ хоть?

пишу-то на C++. и по-моему это не совсем memory leak, по-моему leak — это когда память утекает с концами, а тут проблема в другом — память освобождается только при сворачивании окна, а пока окно активно — нет.
Re[3]: освобождение памяти
От: Аноним  
Дата: 30.04.05 22:49
Оценка:
Здравствуйте, akvakh, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Это называется memory leak

А>>Не ты первый и не ты последний с такой проблемой.
А>>BoundsChecker тебе может помочь.

А>>А вообще на чем пишешь то?

А>>На С++ хоть?

A>пишу-то на C++. и по-моему это не совсем memory leak, по-моему leak — это когда память утекает с концами, а тут проблема в другом — память освобождается только при сворачивании окна, а пока окно активно — нет.



С концами она никогда не утекает.
Даже в худшем случае можно завершить программу и винда за тобой все подчистит.
С этой точки зрения для пользователя это будет тем же самым,
как и принудильное сворачивание/разворачивание окна.

А что ты делаешь, кода окно сворачивается?

В общем нужны детали твоего кода, чтобы что-то посоветовать.
Ну и с BoundsChecker тоже стоит прогнать, если есть такая возможность.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.