![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Куда делась память? [D5]
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;
olegus81 (2006-03-10 15:30:00) [1]unit Un_simple_Mem_test;
interface
implementation
uses
Windows;
var
msg: string;
initialization
finalization
if AllocMemCount > 1 then
begin
Str (AllocMemCount, msg);
msg := msg + ' heap blocks left';
MessageBox (0, PChar(msg), 'Memory Leak', MB_OK);
end;
end.
Leonid Troyanovsky (2006-03-10 08:57:00) [2]
> Сергей М. © (10.03.06 08:42) [45]
> Эти условия, насколько я понимаю, никак не пересекаются
Если даже утечки нет в конкретном случае (отдельное приложение,
статическая библиотека и т.д.), то, почему бы, и не ругнуться.
Оснований, IMHO, достаточно. Хотя, как оно с MemProof не знаю.
--
Regards, LVT.
Сергей М. (2006-03-10 08:42:00) [3]
> Crash Coredump © (09.03.06 17:22) [44]
> ссылку почитай
Там речь идет о конкретных условиях, при которых возможна утечка.
Цитата из статьи в моем вольном переводе :
"Утечка обнаруживает себя в дельфийских библ-ках при специфических условиях.
Наиболее важное условие - ссылка на юнит Controls где-то в юнитах DLL-проекта.
Следующее условие - сборка DLL-проекта без ран-тайм пакетов.
И наконец, DLL должна загружаться/выгружаться в динамике"
Эти условия, насколько я понимаю, никак не пересекаются с условиями, при которых автор этой ветки проводит тестирование : "пустой" EXE-проект GUI-приложения, с одной-единственной "пустой" формой.
Crash Coredump (2006-03-09 17:22:00) [4]Сергей М. © (09.03.06 16:38) [43]
Ты ссылку почитай - утечка есть.
И утечка в этом месте, в MakeObjectInstance
Block := VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
При вызове FreeObjectInstance эта область памяти не освобождается.
Сергей М. (2006-03-09 16:38:00) [5]
> MemProof жалуется. В одном месте - MakeObjectInstance
Ну и что ?
Да мало ли какая хрень на что-то "жалуется" !
Она, эта хрень, имеет ли отношение к ВММ ? ..
Crash Coredump (2006-03-09 16:30:00) [6]
> Никто еще не жаловался на мемлики в Д5-приложении, содержащем
> одну-единственную заведомо пустую форму
MemProof жалуется. В одном месте - MakeObjectInstance
http://www.thedelphimagazine.com/samples/1328/1328.htm
Сергей М. (2006-03-09 16:06:00) [7]
> Нету никакого кода
Нет кода - нет и проблемы.
> создать новое приложение и скомпилить его
.. и никаких утечек там не будет.
Не выдумывай небылиц.
MegaVolt (2006-03-09 15:58:00) [8]Нету никакого кода. Просто создать новое приложение и скомпилить его.
Сергей М. (2006-03-07 10:54:00) [9]
> Выложить скриншет?
Лучше выложи код проекта и код модуля формы
MegaVolt (2006-03-07 10:50:00) [10]>Странный ты товарисч..
Ты уверен что именно я странный а не установленный у меня комплект програмного обеспечения?
>Никто еще не жаловался на мемлики в Д5-приложении
Выложить скриншет?
Сергей М. (2006-03-06 15:46:00) [11]
> MegaVolt © (06.03.06 10:17) [36]
Странный ты товарисч..
Никто еще не жаловался на мемлики в Д5-приложении, содержащем одну-единственную заведомо пустую форму, без кода введенного явно "ручками", а у тебя эти самые мемлики при тех самых условиях откуда-то вдруг появились ни с того ни с сего ...
MegaVolt (2006-03-06 10:17:00) [12]>Я понему разобрался за пол часа...
Я тоже попробовал разбиратся :)
Делаю пустую форму компилирую. Запускаю МемProof и вижу потери памяти :( Причём конкретику где они произошли посмотреть не могу.
Запускаю мемпроф для своей проги вижу потери где то в недрах ComCtrl в MemoryStream по 20 байт на поток. И что мне с этим делать? Править генетический код или как?
Kolan (2006-03-04 12:47:00) [13]На сайте где лежит последняя версия MemProof есть хелп к предидушей... Я понему разобрался за пол часа...
MegaVolt (2006-03-03 18:35:00) [14]>Откуда дровишки?
Запусти код :)
Amoeba (2006-03-03 18:04:00) [15]
> Вот код показывающий потерю памяти.
Откуда дровишки? С помощью чего установил этот факт? Если это показал ProcessEplorer, то с чистой совестью забей. А если MemProof... тогда ищи ошибки в своем коде.
MegaVolt (2006-03-03 16:46:00) [16]>ProcessEplorer от, например
Что то я невижу где он ресурсы памяти показывает. Возможно под 9x это недоступно. Да и вообще эта зверюга упала когда я свою прожку запустил :))
Сергей М. (2006-03-03 16:40:00) [17]Ну отчегоже ? ProcessEplorer от, например, sysinternals.com, даст возможность любому "непродвинотому" юзеру проконтролировать ресурсы памяти интересующего процесса
MegaVolt (2006-03-03 16:32:00) [18]>разные условия тестирования
ага разные.
>Сие не есть факт утечки ..
И как понять есть она или нет? Только анализом кода специалистом?
Сергей М. (2006-03-03 16:29:00) [19]
> 1. При каждом тестировании цифра изведённой памяти разная.
Перво что приходит в голову - разныеусловия тестирования при каждом оном сеансе ...
> 2. Она достаточно большая порядка полуметра :(
Сие не есть факт утечки ..
MegaVolt (2006-03-03 16:14:00) [20]Точнее порядка 50К