Форум: "Система";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c