Освобождение памяти

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Сообщение STAKANOV » 01.11.2005 22:13:24

Насколько актуально перед выходом из программы освобождать занятую (выделенную) память? Кажется это имело значение только в MS-DOS. <_<
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Иван Шихалев » 02.11.2005 01:01:09

1. Менеджер кучи FPC освобождает память.
2. Менеджеры кучи основных ОС — тоже, хоть и не всегда успешно.

Но есть такое понятие, как хороший стиль...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение STAKANOV » 02.11.2005 01:24:36

Иван Шихалев писал(а): Но есть такое понятие, как хороший стиль...

Мне кажется, что дело только в этом. Может это уже устарело? ;)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Иван Шихалев » 02.11.2005 01:42:27

Не думаю. Впрочем так думают более авторитетные товарищи - тот же Вирт...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение STAKANOV » 02.11.2005 02:40:55

Иван Шихалев писал(а): Не думаю. Впрочем так думают более авторитетные товарищи - тот же Вирт...

Т.е. Вирт считает, что память уже можно не освобождать?
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Sniper » 02.11.2005 18:29:38

быстренько скомпилировали свои проги с параметром -gh (Heaprc) и посмотрели сколько памяти не освобождается =(
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение STAKANOV » 02.11.2005 18:54:27

Sniper писал(а): быстренько скомпилировали свои проги с параметром -gh (Heaprc) и посмотрели сколько памяти не освобождается =(

Так это оно перед выходом не освобождается. А после завершения работы процесса система освоюождает все ресуры используемые этим процессом.

Т.е. это память которая в куче, а после выхода из программа исчезает сама куча. И что там в ней осталось уже не важно. Так везде кроме может быть MS-DOS (для TP5.5 это имело значение).
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение noch » 03.11.2005 15:31:55

Если я не ошибаюсь, система освобождает память, которая alloc-алась в типа main(), а память которая забиралась в процедурах не освобождается системой
Отсюда и многочисленные memory leak-и

Стаканову посоветую запустить valgrind и протестировать свои программы с его помощью
Все leak-и заметите
Так же мусорщик boehm-а умеет находить memleaks то есть с его помощью тоже можно
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение STAKANOV » 03.11.2005 16:00:18

Если я не ошибаюсь, система освобождает память, которая alloc-алась в типа main(), а память которая забиралась в процедурах не освобождается системой
Отсюда и многочисленные memory leak-и

Менеджер памяти FPC для выделения памяти использует кучу. Куча это кусок памяти фиксированного размера выделяемый процессу системой, соответствено эта память и освобождается полсе окончания работы процесса. А утечки памяти по-моему возможны только в двух случаях - использование системных функций для выделения памяти и некорректная работа ОС(чего уже давно никто не видел).

Стаканову посоветую запустить valgrind и протестировать свои программы с его помощью

Нашел в портах, поставил, но заставить работать не смог (((( Видно для фри какие-то свои тонкости. Как-нибудь доки почитаю... ;)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение ev » 03.11.2005 23:08:03

А утечки памяти по-моему возможны только в двух случаях - использование системных функций для выделения памяти и некорректная работа ОС(чего уже давно никто не видел)

в win2000 долгое время присутствовала утечка памяти в библиотеке для работы с сетью (сам столкнулся)... исправили или нет сейчас сказать не могу - много уж сервиспаков вышло... утекали копейки, но в сутки выливались в несколько мегабайт :(
ev
долгожитель
 
Сообщения: 1764
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение Иван Шихалев » 04.11.2005 01:09:51

В Винде программа может работать или со своей собственной кучей, или с глобальной, если очень надо... Менеджер памяти FPC использует кучу процесса, которая системой освобождается. В *nix'ах, полагаю, механизм должен быть схожим — система должна страховаться от кривых ручек.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение noch » 04.11.2005 18:49:41

Однако Ваш код возможно когда-либо будет скомпилирован другим компилятором, который иначе распоряжяется памятью. К примеру gpc, и тогда проявятся лики.
Думаю, если писать на паскале то следует придерживаться привычки освобождать память
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение Janus » 07.11.2005 18:33:05

С точки зрения производительности и эффективности, абсолютно все равно, освобождаете вы память или нет. С точки зрения хорошего стиля, освобождать надо.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение STAKANOV » 07.11.2005 21:23:49

Janus писал(а): С точки зрения производительности и эффективности, абсолютно все равно, освобождаете вы память или нет. С точки зрения хорошего стиля, освобождать надо.

Очень хорший стиль полчается когда освобождаешь несколько миллионов блоков памяти. Особенно если учесть, что в этом нет необходимости. ;)

В конце для большей хорошести надо добавить что-то вроде - "Пожалуйста подождите, в этом доме надо закончить уборку перед тем как его снесут"
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Janus » 08.11.2005 18:00:20

А вдруг ты или кто-нибудь еще когда-нибудь потом захочет модифицировать программу? Этот кто-то, не думая о памяти, возьмет, да и допишет прямо в конец программы код, который будет что-то делать. Или даже не в конец, а в секцию finalization модуля.

Нет, ну дописал и дописал, ладно. А что если он решит как-то по-своему использовать свободные (это ему так кажется :D ) указатели? Что если возьмет да и создаст заново разрушенный (опять ему кажется :D ) объект?

Если код только для себя любимого, то можно поступать как угодно. Если для других, лучше, все же, следовать некоторым правилам.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru