Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

edRb Ученик (182), закрыт 4 года назад
Если приложение вызывает утечку памяти, то при завершение работы приложения динамическая память очиститься или нет, то есть так и будет занимать место в памяти до полного выключения машины
Лучший ответ
Николай Веселуха Высший разум (382125) 4 года назад
Завершение родительского процесса не гарантирует завершение дочерних процессов. В этом случае, если дочерние процессы лишены возможности принудительного завершения, они будут висеть в памяти и занимать системные ресурсы до выполнения перезагрузки либо вам их придётся убивать вручную из диспетчера задач (очень плохая идея).
Остальные ответы
boet erg Знаток (423) 4 года назад
очистится, после завершения приложения оно полностью убирается из оперативы
Navaron Мыслитель (7359) 4 года назад
если исключение включает очистку памяти, то да, вычищает, иначе система потом все исправит, есть диспетчер памяти
serd Просветленный (20240) 4 года назад
Выделением памяти для приложения занимается ОС.
Программа запрашивает динамич. память у ОС (которая кст может и не выделить)
ОС все подчистит после завершения программы.
Gesigesend gesets Профи (568) 4 года назад
если это приложение - то по определению приложения - да, ОС очистит.

если это системный драйвер, то на винде я такое пробовал с драйвером, который писал. перезапуск и переустановка драйвера не помогает. помогает только перезагрузка. драйвер не только своего процесса не имеет, но даже память ни к какому из системных процессов не приписана. и мне казалось, что утечки в моем драйвере просто нет)) я не замечал, что общий расход памяти сильно увеличивался. через несколько часов работы системы с этим драйвером свободного ОЗУ не было.
мораль: на Си лучше не писать, а на С++ писать без ручного выделения памяти.
Ярослав Искусственный Интеллект (107903) 4 года назад
Скорее нет:
• память выделенная процессу - освобождается автоматически мемори менеджером ОС
• память выделенная системным объектам созданным процессом - не освобождается, пока сами объекты не будут освобождены (объекты могут не освобождаться и после завершения порождающего процесса. Это зависит от многих факторов).

// Кстати, утечка хэндлов сама по себе намного хуже утечки памяти - поэтому, с объектами ОС надо работать очень внимательно, корректно освобождая ресурсы явным образом (когда компилятор/интерпретатор не делает это магически, оставляя на совести программиста).
Vvvvvv KkkkkkМастер (1076) 4 года назад
На сколько я знаю в ядре Linux перед завершением процесса все открытые дескрипторы закрываются.
Ярослав Искусственный Интеллект (107903) Vvvvvv Kkkkkk, даже если дескриптор используется другим процессом?
Евгений Высочин Просветленный (38033) 4 года назад
Если приложение использовало в работе только свою кучу, то утечка исчезнет. Если прога юзала процессы и память других запущенных программ и там накосячила, то утечка останется до завершения тех приложений.
Похожие вопросы