Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

New(), Dispose() TaskManager   Найти похожие ветки 

 
DVM ©   (2003-10-15 13:02) [0]

Случайно, разбирая поведение одной своей программы заметил, что если я выделяю в программе память с помощью New и освобождаю с помощью Dispose, то объем памяти, занимаемой моей программой (по данным из TaskManagera от XP) только увеличивается и никогда не уменьшается. Причем память реально освобождается, потому как обратиться к освобожденному участку уже нельзя. Что это? Особенность менеджера памяти или так не должно быть?


 
[lamer]Barmaglot ©   (2003-10-15 13:06) [1]

Особенности менеджера. Дельфи РЕАЛЬНО освобождает память, только когда ты из неё выходишь.


 
KSergey ©   (2003-10-15 13:24) [2]

Подозреваю, что не только когда выходишь, иногда и в процессе, но не сразу - это точно.


 
Владислав ©   (2003-10-15 13:26) [3]

Особенность.


 
Игорь Шевченко ©   (2003-10-15 13:34) [4]

Не верьте Task Manager"у. Он никогда не показывает память, которую занимает программа.


 
DVM ©   (2003-10-15 14:17) [5]


> Игорь Шевченко © (15.10.03 13:34) [4]

А кому тогда верить? Пробовал MemProof, так тот вообще говорит, что я не освобождаю память. А дело лишь в том, что выделение и освобождение памяти в разных процедурах находятся. Ставишь в одну - он не ругается. Есть вообще нормальное средство для отслеживания утечек памяти?


 
Игорь Шевченко ©   (2003-10-15 14:37) [6]

DVM © (15.10.03 14:17)

MemProof"у можно верить


 
DVM ©   (2003-10-15 14:56) [7]

Вот набросал кусок, примерно на такой же ругается MemProof. Но мне не понятно почему. Он говорит, что 3 раза не освободили память.

program demo;

type

PMyData = ^TMyData;
TMyData = record
aaa: integer;
bbb: integer;
end;

var
x: array[1..3] of integer;
p: PMyData;

procedure p1;
var
i: integer;
begin
for i:=1 to 3 do
begin
New(P);
P^.aaa:=5;
P^.bbb:=7;
x[i]:=longint(P);
end;
end;

procedure p2;
var
i: integer;
begin
for i:=1 to 3 do
begin
Dispose(PMyData(x[i]));
end;
end;

begin
p1;
p2;
end;


 
Skier ©   (2003-10-15 15:00) [8]

>DVM © (15.10.03 14:56) [7]
С точки зрения работы с памятью, кусок кода правильный.


 
DVM ©   (2003-10-15 15:16) [9]


> Skier © (15.10.03 15:00) [8]

А вот MemProof ругается. А говорят, что верить ему можно. Конечно у меня исходный код не такой примитивный, там у меня есть TabControl, с каждым итемом которого связаны дополнительные данные. Но суть та же.


 
Игорь Шевченко ©   (2003-10-15 15:17) [10]

MemProof конкретно на этот кусок кода не ругается :)


 
DVM ©   (2003-10-15 15:27) [11]


> Игорь Шевченко © (15.10.03 15:17) [10]
> MemProof конкретно на этот кусок кода не ругается :)

Нет он ругается конкретно на выделение/освобождение памяти и указывает конретно на номер строки в исходном коде, которое происходит так как я написал.


 
Skier ©   (2003-10-15 15:34) [12]


> . Конечно у меня исходный код не такой примитивный, там
> у меня есть TabControl, с каждым итемом которого связаны
> дополнительные данные.

Если проблема не надуманная, то часто бывает так что когда в форум постят реальный код, а не пример, то вот тут ларчик и открывается...


 
DVM ©   (2003-10-15 15:43) [13]


> Skier © (15.10.03 15:34) [12]
>
> Если проблема не надуманная, то часто бывает так что когда
> в форум постят реальный код, а не пример, то вот тут ларчик
> и открывается...

Проблема реальная, но, к сожалению кода с собой нет, он дома, а я на работе. К тому же сам исходный код огромный, я думаю не стоит его сюда. Если Вы, Анатолий, не против, я вышлю вам несколько позднее исходник на почтовый ящик. Если конечно Вы не против.
Может статься, что я просто не замечаю какой-нибудь банальной ошибки в коде. Может быть.


 
Skier ©   (2003-10-15 15:45) [14]


> Если конечно Вы не против.

К сожалению, я против. Есть своя работа...


 
DVM ©   (2003-10-15 15:49) [15]


> Skier © (15.10.03 15:45) [14]


Что ж. Жаль. Буду разбираться сам. Или попробую сделать урезанный вариант кода и тогда размещу здесь.

Всем большое спасибо!


 
DVM ©   (2003-10-16 12:22) [16]

Собственно нашел я ошибку - простая опечатка, освобождал не ту переменную.

Всем спасибо за участие.



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

Текущий архив: 2003.12.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
14-75321
Viktor
2003-12-01 14:42
2003.12.23
Кодировка MAC, KOI


14-75334
Undert
2003-11-30 21:40
2003.12.23
Заполнение


7-75431
Kikimora
2003-10-10 01:39
2003.12.23
дисковод


7-75417
неважно
2003-10-16 15:56
2003.12.23
Работа с несколькими компортами одновременно :(


1-75162
Villain
2003-12-09 19:19
2003.12.23
Редактор компонентов.