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

Ваш аккаунт

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

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

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

Глюки с памятью

499
27 октября 2004 года
madjahed
149 / / 14.01.2004
У меня на главной форме программы лежит таймер, который обновляет список. Так вот, включил я
случайно Диспетчер Задач и увидел, что с каждым срабатыванием таймера память занимаемая прогой увиличивается примерно на 200 КБ! Память
использовал вроде рационально, к тому же,на-сколько
я знаю переменные программы не влияют на количество
памяти показываемое в Диспетчере Задач. Уже не знаю что даже делать, если кто хоть что-то предпологает пишите. Надежда только на вас, господа.
368
27 октября 2004 года
rostyslav
629 / / 13.07.2004
Таймер сам по себе не может увеличивать занимаемую память.

Может быть перед обновлением, список не очищается?

типа отсутствует команда Items->Clear().
4
28 октября 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by rostyslav
Таймер сам по себе не может увеличивать занимаемую память.

Может быть перед обновлением, список не очищается?

типа отсутствует команда Items->Clear().



Project->Options->CodeGuard->Enable CodeGuard Validtion

Авось поможет

499
28 октября 2004 года
madjahed
149 / / 14.01.2004
Цитата:
Originally posted by rostyslav
Таймер сам по себе не может увеличивать занимаемую память.

Может быть перед обновлением, список не очищается?

типа отсутствует команда Items->Clear().



Таймер срабатывет примерно каждые 6 секунд и вызывает мою функцию RefreshList() которая
делает Clear() и обновляет список. В конце функции
для всех указателей я делаю delete. Однако
в этой функции я использую собственный класс строк (В AnsiString нету многих специфичных функций, которые мне необходимы. Например функции удаления
определённого символа во всей строке, или шифрование\дешифрование строки). Память используемая моим классом, выделяется динамически.
В деструкторе вызывается HeapDestroy(), так что
скорее всего дело не в нём.

10
28 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by madjahed
В деструкторе вызывается HeapDestroy(), так что
скорее всего дело не в нём.


????! Ты самостоятельно создаешь кучу?

499
28 октября 2004 года
madjahed
149 / / 14.01.2004
Цитата:
Originally posted by smartsoft

????! Ты самостоятельно создаешь кучу?



????! Ну и что ?

10
28 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by madjahed
????! Ну и что ?


И потом с ней работают new и delete?

10
28 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by madjahed
????! Ну и что ?


Короче, чем через час по чайной ложке выдавать, лучше приведи пример кода, создающего, уничтожающего и использующего кучу, тогда разговор будет более предметный.
Или сам ищи баг. Наверняка что-то с кучей перемудрил.

499
29 октября 2004 года
madjahed
149 / / 14.01.2004
Цитата:
Originally posted by smartsoft

Короче, чем через час по чайной ложке выдавать, лучше приведи пример кода, создающего, уничтожающего и использующего кучу, тогда разговор будет более предметный.
Или сам ищи баг. Наверняка что-то с кучей перемудрил.



С кучей у меня всё правильно. Что там можно перемудрить ? Создаю функцией HeapCreate()
, удаляю функцией HeapDestroy(). Дело в том, что
по окончанию работы любой функции должны удаляться и все переменные этой функции. Один обьект
моего класса строк занимает 12КБ (в скомпилированном виде) который по окончанию работы
функции должен удаляться, но этого не происходит.
К тому же я создаю всего лишь объект, а не указатель на него.То есть не так:
MyString *string;
А так :
MyString string;

10
29 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by madjahed
К тому же я создаю всего лишь объект, а не указатель на него.То есть не так:
MyString *string;
А так :
MyString string;


При таком синтаксисе он может создаться и в стеке...

Кстати, совершенно не факт, что Windows будет освобождать память процесса при освобождении кучи. Программа имеет окно? Можно попробовать свернуть ее в трей, развернуть обратно и посмотреть расход памяти до и после процесса.

И точно также не факт, что стандартные функции работы с памятью будут работать с вручную созданной кучей без дополнительных ухищрений. Кстати, я не в курсе, использует ли new/delete Борландовский менеджер памяти или нет.

499
29 октября 2004 года
madjahed
149 / / 14.01.2004
Благодарю SmartSoft'а за помощь. Проблему я уже нашёл. Глючил Борландовский ListView. Теперь я делаю ту же самую задачу, но другим путём, с использованием Windows API. Ещё раз благодарю SmartSoft'a за обсуждение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог