|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.04.2008, 20:27 | #1 |
Новичок
Джуниор
Регистрация: 06.04.2008
Сообщений: 2
|
Почему Dispose не освобождает память?
Доброго времени суток.
Я всегда считал, что процедура Dispose особождает выделенную подпрограммой New память для какой-то переменной. Но тут столкнулся с такой проблемой, что по какой-то непонятной мне причине она этого не делает. Вот простой пример: const n = 100000; var x: array[1..n] of ^Integer; i: Integer; begin for i := 1 to n do begin x[i] := nil; New(x[i]); end; for i := 1 to n do begin Dispose(x[i]); x[i] := nil; end; readln; end. Если посмотреть в диспетчер задач, до начала первого цикла программа занимает 2508 Кб оперативной памяти. После его выполнения она начинает использовать 4468 Кб. Внутри тела второго цикла память для всех элементов массива должна освободиться процедурой Dispose. Но после цикла программа продолжает занимать 4468 Кб памяти. Насколько я понимаю, она её освобождает, но для дальнейшего использования этой же программой. Если кто-нибудь знает, как сделать, чтоб память освобождалась совсем, поделитесь пожалуйста. Заранее спасибо за ответы. |
06.04.2008, 21:22 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Dispose, также как и New использует вызовы MemoryManager, который управляет распределением блоков памяти в программах на Delphi. С точки зрения программы после dispose память освобождена. Когда MemoryManager вернет ее Windows это его дело. Так сделано для оптимизации управления памятью.
|
07.04.2008, 19:16 | #3 |
Новичок
Джуниор
Регистрация: 06.04.2008
Сообщений: 2
|
Да, теперь ясно. Благодарю за ответ
|
07.04.2008, 19:38 | #4 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
x[i] := nil; это лишнее ..
особенно второй
Берегите друг друга!
|
08.04.2008, 00:17 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Virtson,
Цитата:
Почему то Pascal (впрочем, как и Дельфи) при освобождении переменной не присвает ей NIL :-( в дельфи даже ввели специальную процедуру: FreeAndNil( ) попробуйте вот такую вот бредятину выполнить: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оперативная память | ogurchik | Компьютерное железо | 12 | 12.12.2008 15:42 |
Оперативная память | ogurchik | Компьютерное железо | 1 | 02.09.2008 19:39 |
Динамическая память | MadDog__ | Помощь студентам | 2 | 22.11.2007 00:05 |
Память процессов | Carbon | Безопасность, Шифрование | 2 | 05.05.2007 23:59 |