Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Куда делась память? [D5]


Страницы:   1 2 3

MegaVolt ©   (2006-03-03 11:52:00) 

Вот код показывающий потерю памяти. Как избежать потери?

procedure TForm1.Button1Click(Sender: TObject);
Var
 Mem:integer;
begin
 Mem:=GetHeapStatus.TotalCommitted+GetHeapStatus.TotalAllocated;
 ShowMessage('Теряем память');
 Mem:=GetHeapStatus.TotalCommitted+GetHeapStatus.TotalAllocated-Mem;
 if mem<>0 then ShowMessage(IntToStr(Mem));
end;


MegaVolt   (2006-03-03 16:06:00) [21]

>А ты уверен что есть утечки ?

Ну несколько симптомов:
1. При каждом тестировании цифра изведённой памяти разная.
2. Она достаточно большая порядка полуметра :(

Как в MemProof посмотреть после закрытия где была выделена память которая не освобождена?


Сергей М.   (2006-03-03 15:42:00) [22]

А ты уверен что есть утечки ?

На основании чего ?

Изложи подробно ...


Сергей М.   (2006-03-03 15:42:00) [23]

А ты уверен что есть утечки ?

На основании чего ?

Изложи подробно ...


Сергей М.   (2006-03-03 15:41:00) [24]

А ты уверен что есть утечки ?

На основании чего ?

Изложи подробно ...


MegaVolt   (2006-03-03 15:34:00) [25]

>Приводи реальный фрагмент..

Выложить 30К кода? А выделить кусочек где есть потери я не могу потому что не знаю как :( Ибо даже на  ShowMessage ругается. Т.е. можно выделить кусочек там одна цифра потерь. Можно взять чуть поменьше там другая. Т.е. отделить код где точно нету от того где есть я не могу. В этом то и проблема.

>А к ней разве Readme нету ?

Есть :) Как запустить и получить результаты я понимаю но вот как по результатам найти место где у меня утечка я не очень понимаю.


Сергей М.   (2006-03-03 15:06:00) [26]


> MegaVolt ©   (03.03.06 14:58) [20]


Приводи реальныйфрагмент..


Игорь Шевченко   (2006-03-03 14:58:00) [27]


> Но к сожалению пользоватся я ей не очень умею


А к ней разве Readme нету ?


MegaVolt   (2006-03-03 14:58:00) [28]

>Лучше бы ты привел пример своего кода, в котором ты сомневаешься на тему утечек

Вот пример в самом первом сообщении.
А реальная программа достаточно большая с кучей потоков обращений к апишным функциям, работой с потоками и пр...
Вот я взял и проверил. Оказывается утечки есть. Решил их локализовать убрал потоки, убрал почит всё и осталась только то что написано в самом начале. Т.е. получается выловить где у меня память пропадает методом заремливания частей неполучится :(


Сергей М.   (2006-03-03 14:51:00) [29]

Лучше бы ты привел пример своего кода, в котором ты сомневаешься на тему утечек


MegaVolt   (2006-03-03 14:40:00) [30]

>Есть хорошая программа MemProof

Есть. Но к сожалению пользоватся я ей не очень умею :( Если бы был примерчик приложения с показанными шагами по отлову утечек...


Игорь Шевченко   (2006-03-03 14:39:00) [31]

Есть хорошая программа MemProof


Сергей М.   (2006-03-03 14:29:00) [32]


> MegaVolt ©   (03.03.06 14:20) [15]


Но сорить при этом ты имеешь право лишь на "отведенной" тебе территории.

По аналогии это виртуальное адресное пространство твоего процесса.
Выше этих своих "штанов" выпрыгнуть ты не сможешь.


MegaVolt   (2006-03-03 14:20:00) [33]

>Если дворник всегда уберет за тобой мусор, то какая разница, уберешь ли ты его за собой или не уберешь ?

Никакой если дворнику платить за объём выполненной работы платить не нужно.


Сергей М.   (2006-03-03 13:42:00) [34]


> можно как то дельфяшному менеджеру давать указания сбросить
> свободную память?


Нельзя.
Но можно подменить менеджер памяти.
См. TMemoryManager type


> Ведь если это делает ОС то какая разница делает ли что то
> дельфи ли инет.


Если дворник всегда уберет за тобой мусор, то какая разница, уберешь ли ты его за собой или не уберешь ?


MegaVolt   (2006-03-03 13:32:00) [35]

А можно как то дельфяшному менеджеру давать указания сбросить свободную память?

И зачем тогда пишут что дельфи память за динамическими массивами самостоятельно удаляет по завершению приложения? Ведь если это делает ОС то какая разница делает ли что то дельфи ли инет.  Ведь результат одинаков. Или я не прав?


Сергей М.   (2006-03-03 13:17:00) [36]


> контроль утечки памяти нужен только для того чтобы моя прога
> пока работает не заняла всю память?


Ну что-то вроде того ..


> от системы после закрытия она ничего занять не может?


После закрытия (неважно каким образом) всенеосвобожденные перед этим явно ресурсы процесса (в т.ч. и ресурсы памяти) будут освобождены. Это концептуальное поведение и привелегия ОС.


MegaVolt   (2006-03-03 13:12:00) [37]

>В любом случае все ресурсы (в т.ч. и ресурсы памяти), которые были заняты процессом приложения в ходе его работы, будут немедленно и безусловно освобождены и возвращены под контроль ОС.

Т.е. контроль утечки памяти нужен только для того чтобы моя прога пока работает не заняла всю память? А от системы после закрытия она ничего занять не может?


Сергей М.   (2006-03-03 13:09:00) [38]


> приложение как то это делает по закрытию


Приложение вправе вообще этого не делать.
Приложение вправе вызвать в любом месте halt() и немедленно завершить выполнение своего процесса, не следуя никаким более правилам. Приложение так же м.б. принудительно снято пользователем с выполнения "тремя веселыми кнопками".
В любом случае все ресурсы (в т.ч. и ресурсы памяти), которые были заняты процессом приложения в ходе его работы, будут немедленно и безусловно освобождены и возвращены под контроль ОС.


MegaVolt   (2006-03-03 13:02:00) [39]

> просто ставишь код проверки в итерацию цикла и пишешь результат в лог

Т.е. без ручной обработки никак?

А можно как то заставить сббросить всю свободную но зарезервированную память чтобы увидеть сколько реально занято? Т.е. приложение как то это делает по закрытию. А можно ли это сделать самостоятельно.


MegaVolt   (2006-03-03 12:59:00) [40]

>главное - не терять память, которая выделяется явно.

Это понятно но когда размеры проги становятся достаточно большими такая проверка занимает время. И не гарантирует точность.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо