Идея реализации модуля проверки утечки памяти

Так как мы программируем на Borland Delphi, то мы знаем, что за выделение и освобождение памяти в программе отвечают GetMem и FreeMem соответственно. На первый взгляд, написание своих аналогичных методов позволит контролировать процесс выделения и освобождения памяти. Например, вот так:

procedure MyGetMem(var P: Pointer; Size: Integer);
begin
  // Здесь вставляем свой код
  GetMem(P, Size);
end;

procedure MyFreeMem(var P: Pointer);
begin
  // Здесь вставляем свой код
  FreeMem(P);
end;

Ты скажешь, что вот и само решение, но могу заверить, что это не так, если ты используешь объекты и классы! Как ты заставишь систему для выделения и освобождения памяти использовать твои методы? Она не знает об их существовании!

А теперь вспомним о модуле ShareMem, который каким-то образом заставляет систему понимать свои GetMem и FreeMem. Вот тут и есть ответ на решение. Достаточно переопределить менеджер памяти в системе!

Ну а дальше всё просто. Берём и считаем количество вызовов GetMem и FreeMem. Если по завершению работы твоей программы этот счётчик не нулевой, то значит у тебя в программе есть утечка памяти.

Если тебе интересно, как реализован модуль проверки утечки памяти, то щёлкай здесь.

    18.10.2005


Hosted by uCoz