Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Вниз

Нужно ли делать такие вызовы перед выходом из программы?   Найти похожие ветки 

 
AlexanderMS ©   (2008-08-19 13:20) [0]

1) Скажите, пожалуйста, нужно ли перед выходом из программы, для освобождения занятой памяти, делать такие вызовы:
SetLength(SomeDynArray, 0);
MyStringList.Free;
?
Или память, занимаемая данными, на которые ссылаются указатели, сама освобождается при завершении процесса?

2) Аналогично: закрывать ли дескрипторы, например:
CloseHandle(FileHandle) ?

3)И ещё: при использовании OpenGL нужно ли вызывать перед выходом glDeleteTextures, glDeleteLists и т. п? Или при выгрузке экземпляра библиотеки она это сделает за нас?

Заранее спасибо.


 
Vlad Oshin ©   (2008-08-19 13:24) [1]


> 1) Скажите, пожалуйста, нужно ли перед выходом из программы,
>  для освобождения занятой памяти, делать такие вызовы:
> SetLength(SomeDynArray, 0);
> MyStringList.Free;
>
> 2) Аналогично: закрывать ли дескрипторы, например:
> CloseHandle(FileHandle) ?

да


> память, занимаемая данными, на которые ссылаются указатели,
>  сама освобождается при завершении процесса?

да


 
Игорь Шевченко ©   (2008-08-19 13:27) [2]

Вся память освобождается при завершении процесса
Все открытые файлы и прочие объекты закрываются при завершении процесса.


 
DVM ©   (2008-08-19 13:48) [3]


> AlexanderMS ©   (19.08.08 13:20)

Несмотря на [2], лучше все же это делать самому. Ибо, во-первых, это правило хорошего тона, а во-вторых, все это тогда не будет мешать искать утечки в других местах работы программы, если они вдруг появятся.


 
Vlad Oshin ©   (2008-08-19 14:04) [4]

у меня такой вопрос:
Может ли так случится, что программа попросила записать на диск, потом сделал halt
Система стала забирать память за программой, испортила очередь на запись, потом файл дозаписала, потом закрыла.


 
clickmaker ©   (2008-08-19 15:06) [5]

> [4] Vlad Oshin ©   (19.08.08 14:04)

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


 
Сергей М. ©   (2008-08-19 15:22) [6]


> Система стала забирать память за программой


Это как ?


 
AlexanderMS ©   (2008-08-19 15:26) [7]

Спасибо за ответы.


> а во-вторых, все это тогда не будет мешать искать утечки
> в других местах работы программы, если они вдруг появятся.
>

А как узнать, если они появятся? И как искать утечки?


 
DVM ©   (2008-08-19 15:28) [8]


> А как узнать, если они появятся? И как искать утечки?

Подключить FastMM4 или MemProof использовать. В D2006 и выше можно первой строкой проекта указать ReportMemoryLeaksOnShutdown := true;


 
Vlad Oshin ©   (2008-08-19 15:29) [9]


> Система стала забирать память за программой
>
>
> Это как ?

не знаю.
.. как она ее назад в свой менеджер забирает?


> А как узнать, если они появятся? И как искать утечки?

поставить какой либо менеджер.
FastMM4, например, постоянно кричит, если что-то забыл освободить


 
Игорь Шевченко ©   (2008-08-19 15:30) [10]

Не знаю, кто как действует, но я не буду искать утечки в программах, время выполнения которых конечно и заведомо известно. Времени жалко, как на поиск, так и на написание кода по их, утечек, устранению.


 
DVM ©   (2008-08-19 15:32) [11]


> но я не буду искать утечки в программах, время выполнения
> которых конечно и заведомо известно.

в Win9x чревато нестабильным поведением ОС, не все там возвращается системе автоматически после завершения процесса.


 
Игорь Шевченко ©   (2008-08-19 15:35) [12]

DVM ©   (19.08.08 15:32) [11]


> не все там возвращается системе автоматически после завершения
> процесса.


Например ?


 
DVM ©   (2008-08-19 15:37) [13]


> Например ?

Ресурсы GDI. Многократно наблюдал следующую картину, при аварийном завершении программы, содержащей массовые утечки ресурсов GDI, потом в во всех остальных окнах наблюдались проблемы с иконками, битмапами и т.д.


 
Игорь Шевченко ©   (2008-08-19 15:59) [14]

DVM ©   (19.08.08 15:37) [13]


> Ресурсы GDI.


Это немного другая проблема - при массовых утечках там внутре что-то начинает ломаться. И завершение работы даже всех программ тут не спасает. Собственно, если запустить несколько программ, активно жрущих ресурсы GDI, даже несмотря на отсутствие в них утечек картина будет аналогичная.


 
Loginov Dmitry ©   (2008-08-19 23:49) [15]

> 1) Скажите, пожалуйста, нужно ли перед выходом из программы,
> для освобождения занятой памяти, делать такие вызовы:
> SetLength(SomeDynArray, 0);
> MyStringList.Free;
> ?
> Или память, занимаемая данными, на которые ссылаются указатели,
> сама освобождается при завершении процесса?
>
> 2) Аналогично: закрывать ли дескрипторы, например:
> CloseHandle(FileHandle) ?


Само собой винда все подчистит, заморачиваться на такие мелочи - смысла особого нет. Однако если пишешь модуль (PAS-файл), который может использоваться не только в EXE, но и в DLL, то здесь такое может не прокатить. Во-первых ресурсы после FreeLibrary() не освободятся, во-вторых у объекта, созданного в DLL может быть Owner из EXE, и тогда будет AV на методе Free у Owner"a.

P.S. Код SetLength(SomeDynArray, 0) лишен всякого смысла, т.к. все динамические объекты при выходе освобождаются автоматически (если не ошибаюсь, это происходит в момент finalization модуля, в котором динамический объект объявлен).



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.053 c
15-1218034460
alex-drob
2008-08-06 18:54
2008.09.28
Новый закон о безнадзорности


2-1219122526
kate158
2008-08-19 09:08
2008.09.28
сдвиг данных в dbgrid e на 1 вверх


3-1206767549
Ary
2008-03-29 08:12
2008.09.28
управление транзакциями


2-1218790822
Vlad Oshin
2008-08-15 13:00
2008.09.28
Интерфейс. Как бы сделать?


15-1217963808
palva
2008-08-05 23:16
2008.09.28
Не о рычагах, а об электронах





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский