Освобождение памяти
Модератор: Модераторы
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Sniper писал(а): быстренько скомпилировали свои проги с параметром -gh (Heaprc) и посмотрели сколько памяти не освобождается =(
Так это оно перед выходом не освобождается. А после завершения работы процесса система освоюождает все ресуры используемые этим процессом.
Т.е. это память которая в куче, а после выхода из программа исчезает сама куча. И что там в ней осталось уже не важно. Так везде кроме может быть MS-DOS (для TP5.5 это имело значение).
- noch
- постоялец
- Сообщения: 145
- Зарегистрирован: 07.06.2005 09:45:49
- Откуда: Armenia
- Контактная информация:
Если я не ошибаюсь, система освобождает память, которая alloc-алась в типа main(), а память которая забиралась в процедурах не освобождается системой
Отсюда и многочисленные memory leak-и
Стаканову посоветую запустить valgrind и протестировать свои программы с его помощью
Все leak-и заметите
Так же мусорщик boehm-а умеет находить memleaks то есть с его помощью тоже можно
Отсюда и многочисленные memory leak-и
Стаканову посоветую запустить valgrind и протестировать свои программы с его помощью
Все leak-и заметите
Так же мусорщик boehm-а умеет находить memleaks то есть с его помощью тоже можно
Если я не ошибаюсь, система освобождает память, которая alloc-алась в типа main(), а память которая забиралась в процедурах не освобождается системой
Отсюда и многочисленные memory leak-и
Менеджер памяти FPC для выделения памяти использует кучу. Куча это кусок памяти фиксированного размера выделяемый процессу системой, соответствено эта память и освобождается полсе окончания работы процесса. А утечки памяти по-моему возможны только в двух случаях - использование системных функций для выделения памяти и некорректная работа ОС(чего уже давно никто не видел).
Стаканову посоветую запустить valgrind и протестировать свои программы с его помощью
Нашел в портах, поставил, но заставить работать не смог (((( Видно для фри какие-то свои тонкости. Как-нибудь доки почитаю...
А утечки памяти по-моему возможны только в двух случаях - использование системных функций для выделения памяти и некорректная работа ОС(чего уже давно никто не видел)
в win2000 долгое время присутствовала утечка памяти в библиотеке для работы с сетью (сам столкнулся)... исправили или нет сейчас сказать не могу - много уж сервиспаков вышло... утекали копейки, но в сутки выливались в несколько мегабайт
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Janus писал(а): С точки зрения производительности и эффективности, абсолютно все равно, освобождаете вы память или нет. С точки зрения хорошего стиля, освобождать надо.
Очень хорший стиль полчается когда освобождаешь несколько миллионов блоков памяти. Особенно если учесть, что в этом нет необходимости.
В конце для большей хорошести надо добавить что-то вроде - "Пожалуйста подождите, в этом доме надо закончить уборку перед тем как его снесут"
А вдруг ты или кто-нибудь еще когда-нибудь потом захочет модифицировать программу? Этот кто-то, не думая о памяти, возьмет, да и допишет прямо в конец программы код, который будет что-то делать. Или даже не в конец, а в секцию finalization модуля.
Нет, ну дописал и дописал, ладно. А что если он решит как-то по-своему использовать свободные (это ему так кажется
) указатели? Что если возьмет да и создаст заново разрушенный (опять ему кажется
) объект?
Если код только для себя любимого, то можно поступать как угодно. Если для других, лучше, все же, следовать некоторым правилам.
Нет, ну дописал и дописал, ладно. А что если он решит как-то по-своему использовать свободные (это ему так кажется
Если код только для себя любимого, то можно поступать как угодно. Если для других, лучше, все же, следовать некоторым правилам.
