Глюки с памятью
случайно Диспетчер Задач и увидел, что с каждым срабатыванием таймера память занимаемая прогой увиличивается примерно на 200 КБ! Память
использовал вроде рационально, к тому же,на-сколько
я знаю переменные программы не влияют на количество
памяти показываемое в Диспетчере Задач. Уже не знаю что даже делать, если кто хоть что-то предпологает пишите. Надежда только на вас, господа.
Может быть перед обновлением, список не очищается?
типа отсутствует команда Items->Clear().
Таймер сам по себе не может увеличивать занимаемую память.
Может быть перед обновлением, список не очищается?
типа отсутствует команда Items->Clear().
Project->Options->CodeGuard->Enable CodeGuard Validtion
Авось поможет
Таймер сам по себе не может увеличивать занимаемую память.
Может быть перед обновлением, список не очищается?
типа отсутствует команда Items->Clear().
Таймер срабатывет примерно каждые 6 секунд и вызывает мою функцию RefreshList() которая
делает Clear() и обновляет список. В конце функции
для всех указателей я делаю delete. Однако
в этой функции я использую собственный класс строк (В AnsiString нету многих специфичных функций, которые мне необходимы. Например функции удаления
определённого символа во всей строке, или шифрование\дешифрование строки). Память используемая моим классом, выделяется динамически.
В деструкторе вызывается HeapDestroy(), так что
скорее всего дело не в нём.
В деструкторе вызывается HeapDestroy(), так что
скорее всего дело не в нём.
????! Ты самостоятельно создаешь кучу?
????! Ты самостоятельно создаешь кучу?
????! Ну и что ?
????! Ну и что ?
И потом с ней работают new и delete?
????! Ну и что ?
Короче, чем через час по чайной ложке выдавать, лучше приведи пример кода, создающего, уничтожающего и использующего кучу, тогда разговор будет более предметный.
Или сам ищи баг. Наверняка что-то с кучей перемудрил.
Короче, чем через час по чайной ложке выдавать, лучше приведи пример кода, создающего, уничтожающего и использующего кучу, тогда разговор будет более предметный.
Или сам ищи баг. Наверняка что-то с кучей перемудрил.
С кучей у меня всё правильно. Что там можно перемудрить ? Создаю функцией HeapCreate()
, удаляю функцией HeapDestroy(). Дело в том, что
по окончанию работы любой функции должны удаляться и все переменные этой функции. Один обьект
моего класса строк занимает 12КБ (в скомпилированном виде) который по окончанию работы
функции должен удаляться, но этого не происходит.
К тому же я создаю всего лишь объект, а не указатель на него.То есть не так:
MyString *string;
А так :
MyString string;
К тому же я создаю всего лишь объект, а не указатель на него.То есть не так:
MyString *string;
А так :
MyString string;
При таком синтаксисе он может создаться и в стеке...
Кстати, совершенно не факт, что Windows будет освобождать память процесса при освобождении кучи. Программа имеет окно? Можно попробовать свернуть ее в трей, развернуть обратно и посмотреть расход памяти до и после процесса.
И точно также не факт, что стандартные функции работы с памятью будут работать с вручную созданной кучей без дополнительных ухищрений. Кстати, я не в курсе, использует ли new/delete Борландовский менеджер памяти или нет.