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;


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К


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

Наверх

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