Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-75254
ShadowSmart
2003-12-10 13:49
2003.12.23
Приоритет потока, загрузка процессора


3-75076
galexis
2003-12-01 10:35
2003.12.23
Данные типа FLOAT


14-75352
Sergeef
2003-11-28 00:19
2003.12.23
Написание игр на Delphi...Целесообразно ли это?


1-75178
Silver_
2003-12-10 14:56
2003.12.23
Screen.Forms - может кто поправит, если не прав?


14-75384
Dimka Maslov
2003-12-01 14:49
2003.12.23
Немного о политике





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский