Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.05.15;
Скачать: [xml.tar.bz2];

Вниз

Методы проверки утечки памяти в программе   Найти похожие ветки 

 
Baks   (2011-01-30 19:54) [0]

Подскажите, как вы проверяете, есть ли утечка памяти в программе или нет. Вроде для этого специальные компоненты есть?


 
DVM ©   (2011-01-30 20:49) [1]

FastMM4, MemProof,  AQTime


 
Baks   (2011-01-30 21:31) [2]

Вот подскажите. Обнаружил, что вызов данной функции в цикле приводит к утечке памяти. Почему?

TMyRec = record
  MStr: String;
  UStr: String;
  ID: Integer;
end;

function GetMR: TMyRec;
begin
ZeroMemory(@Result, SizeOf(Result));

Result.MStr := "Text";
Result.UStr := "Text";
Result.ID := 1;
end;

При втором и последующих входах Result содержит прежние данные.
Чтобы их очистить я выполняю ZeroMemory(@Result, SizeOf(Result));
Но обнаружил, что если эту процедуру убрать, то утечки памяти не будет.
Почему? И как правильно в данном случае очищать Result?


 
DVM ©   (2011-01-30 21:37) [3]


>  Обнаружил, что вызов данной функции в цикле приводит к
> утечке памяти.

а как ты обнаружил?


 
NailMan ©   (2011-01-30 21:48) [4]

а если не String, а ShortString использовать, утечки будут наблюдаться?


 
DVM ©   (2011-01-30 21:49) [5]


> NailMan ©   (30.01.11 21:48) [4]

нет конечно


 
Baks   (2011-01-30 21:50) [6]

Открываю Менеджер задач Windows и смотрю на память, которая расходуется. Если убрать строку ZeroMemory, то используемая память перестаёт увеличиваться.


 
DVM ©   (2011-01-30 21:53) [7]


> Открываю Менеджер задач Windows и смотрю на память, которая
> расходуется

Столбец какой смотришь? Там не любой столбец отражает реально занимаемую память.
Утечка у тебя возникает потому что не надо делать длинным строкам ZeroMemory


 
Baks   (2011-01-30 21:58) [8]

Смотрю "Память" после "ЦП".
Да, точно, если сделать например String[250], то память остаётся неизменной. Я забыл, что строки это тоже дин. массивы.


 
Ega23 ©   (2011-01-31 01:07) [9]

{$IFDEF DEBUG}
ReportMemoryLeaksOnShutDown := True;
{$ENDIF}


 
Германн ©   (2011-01-31 01:55) [10]


> Вроде для этого специальные компоненты есть?

Наберусь наглости (весьма оправданной, кстати) и посоветую автору http://www.eurekalog.com/index_delphi.php


 
Baks   (2011-01-31 03:07) [11]

За жалких Baks * 99


 
Германн ©   (2011-01-31 03:23) [12]


> Baks   (31.01.11 03:07) [11]
>
> За жалких Baks * 99
>

Тебе может и за "жалких". А нам спокойнее.
А тебе вполне реальная помощь (техподдержка) от весьма реальных людей.
Кстати весьма уважаемых на сём форуме. (Да и на других известных русскоязычных форумах по Дельфи).

P.S. О "жалких $99". Сколько ты в месяц тратишь на свой мобильник?

P.P.S. Или я тебя неправильно понял?


 
Baks   (2011-01-31 04:07) [13]


>  Или я тебя неправильно понял?


Правильно :)


> Сколько ты в месяц тратишь на свой мобильник?


Это точно не по адресу :) Я самый невыгодный абонент в мире. За месяц могу не потратить ни рубля. Я им почти не пользуюсь. Следующий вопрос наверно будет про пиво :)
А вообще я пожалуй за $1,119 возьму. У меня как раз они в кармане валются валяются :)


 
Baks   (2011-01-31 05:50) [14]

FastMM4 просит SHFolder.dcu. Где его взять? Где он должен быть? У меня Delphi 5.


 
Slym ©   (2011-01-31 07:19) [15]

Baks   (30.01.11 19:54)
MStr: String;

стринги низя ZeroMemory, стринга это указатель...
а ты сними делаешь вот это:
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 p:pointer;
begin
 for i:=0 to 10 do
 begin
   GetMem(p,1048576);
   p:=0;
   FreeMem(p);
 end;
end;


 
Slym ©   (2011-01-31 07:21) [16]

http://delphimaster.net/view/15-1296165080/
тамже все расписано


 
Anatoly Podgoretsky ©   (2011-01-31 08:52) [17]

> Baks  (31.01.2011 04:07:13)  [13]

Пациент пьете? Нет
Пациент курите? Нет
С бабами гуляете? Нет

Доктор: пациент не сопротивляйтесь, я все равно что ни будь найду.


 
Baks   (2011-02-01 13:44) [18]


> стринги низя ZeroMemory


Да я уже понял. Я просто рвал свои стринги :)


> пациент не сопротивляйтесь, я все равно что ни будь найду


Пусть ищет :)

А я вот что ещё хочу спросить:

Подключил FastMM, получил:

В этом приложении происходят утечки памяти. Утечки блоков маленького размера (исключая ожидаемые утечки зарегистрированные по указателю): 37 - 52 байт: AnsiString x 1

Это происходило из-за следующего кода:

initialization
 AppPath := ExtractFilePath(ParamStr(0));
 FilesPath := AppPath + FilesDirName + "\";

Добавил:

finalization
 Finalize(AppPath);

Больше сообщения об утечке не выводятся. Правильно ли я сделал?
И ещё вопрос: почему ничего не сообщается о переменной FilesPath?


 
IPranker ©   (2011-02-01 14:32) [19]


> Baks   (30.01.11 19:54)
>
> Подскажите, как вы проверяете, есть ли утечка памяти в программе
> или нет. Вроде для этого специальные компоненты есть?


http://www.gunsmoker.ru/2009/05/blog-post_24.html


 
TUser ©   (2011-02-01 16:13) [20]

А вот утечка в программе cmd.exe

{$apptype console}

begin
 writeln (ParamStr (1));
end.

и запускаем

@echo off

for %%n in ( F:\mypath\*.ent ) do a.exe %%n


В taskmgr видим, что память течет. Куда-то.

Запускаем так

@echo off

a.exe "F:\mypath\file1.ent"
a.exe "F:\mypath\file2.ent"
a.exe "F:\mypath\file3.ent"
a.exe "F:\mypath\file4.ent"
...


Не течет.


 
Дмитрий Тимохов   (2011-02-01 17:53) [21]

Я вот с FastMM разбирался когда-то, вроде все актуально, сам иногда пользуюсь, если забуду что

http://timokhov.blogspot.com/2007/03/delphi-2007-iii-fastmm.html

PS Остальное не читать. Меня кроме этой статьи на что-то реально полезное не хватило. Слабак.


 
Дмитрий Тимохов   (2011-02-01 17:53) [22]

Да, и http://www.gunsmoker.ru надо читать. Ищи на сайте, у него там масса материалов по теме.


 
Baks   (2011-02-01 21:27) [23]


> http://www.gunsmoker.ru/2009/05/blog-post_24.html
> http://timokhov.blogspot.com/2007/03/delphi-2007-iii-fastmm.
> html


Я кстати обе эти статьи уже недавно читал, через google находил.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2011.05.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.003 c
2-1297090102
aka
2011-02-07 17:48
2011.05.15
WindowState


15-1296336581
Юрий
2011-01-30 00:29
2011.05.15
С днем рождения ! 30 января 2011 воскресенье


15-1296163782
Юрий
2011-01-28 00:29
2011.05.15
С днем рождения ! 28 января 2011 пятница


2-1297027755
Вартам
2011-02-07 00:29
2011.05.15
Сортировка записей.


15-1296652538
Артём
2011-02-02 16:15
2011.05.15
Какой компилятор лучше использовать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский