Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Непонятности с памятью 


mio   (2002-04-08 18:04) [0]

Граждане! Что это: глюк Delphi5 или моя собственная дурость?
Писал я DLLку. Дабы не наделать memory leaks, подсунул свой менеджер памяти (SetMemoryManager) с простым подсчетом количества выделяемых и освобождаемых блоков. Происходило это в разделе инициализации модуля, ну, скажем, MemoryCheck. А в finalization того же модуля восстанавливался "родной" обработчик, после чего выводился MessageBox с количеством выделенных и освобожденных блоков.

В DLLке было примерно следующее:

library MyDll;
uses MemoryCheck, ...
...
var s: string;
AppHandle: cardinal;
Reg: TRegistry;
begin
Reg:= TRegistry.Create;
if Reg.OpenKey("Software\MySoft\MyApp\Setup", false) then begin
s:= Reg.ReadString("MainFrm_Caption");
AppHandle:= FindWindow(nil, pChar(s));
{*} if AppHandle <> 0 then
Application.Handle:= AppHandle;
end;
Reg.Free;
end;

Больше не было ничего. Вообще.

Так вот. Линковалось это дело статически к не-Delphi-приложению, и, как и положено, при завершении последнего выскакивал мой MessageBox. И была там 1 (одна) дыра в памяти. Я долго мыслил: откуда бы? Ничего не придумал, но (случаи-то всякие бывают:-) после строки, помеченной в тексте {*}, написал вот что:

s:= "";

И дырка исчезла - как и не было. Объяснить сего фокуса я для себя никак не смог. Может, устарели мои представления о строках (string) в Delphi? Если кто из Мастеров понял, в чем дело, я был бы очень признателен...



mio   (2002-04-10 17:05) [1]

Ладно, Мастера... Сам разобрался. Похоже, память из-под строки освобождается позже, чем срабатывает finalization модуля проверки памяти.



Mystic   (2002-04-10 18:15) [2]

Зачем придумывать что-то свое, если есть (system.pas)

var
AllocMemCount: Integer; { Number of allocated memory blocks }
AllocMemSize: Integer; { Total size of allocated memory blocks }





Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.026 c
1-69895           DeMoN-777             2002-04-09 00:43  2002.04.22  
Проблема с текстовымми файлами


14-70016          Lego                  2002-03-16 02:15  2002.04.22  
Как выключить вообще комбинацию клавиш ALT + F4?


6-69959           Alexey Evstigneev     2001-10-30 06:51  2002.04.22  
Wake-on-Lan


3-69744           vasilly               2002-04-01 08:43  2002.04.22  
Нельзя сохранить из дельф больше чем 256 символов в MS SQL!!!


14-69969          Hiks1                 2002-03-13 07:15  2002.04.22  
Alt+F4