Подтвердить что ты не робот

Выпущена ли утечка памяти при выходе программы?

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

4b9b3361

Ответ 1

Да, "утечка памяти" - это просто память, на которую процесс больше не ссылается и, следовательно, больше не может быть свободной. ОС по-прежнему отслеживает всю память, выделенную для процесса, и освободит ее, когда этот процесс завершится.

В подавляющем большинстве случаев ОС освобождает память - как в случае с обычными "разновидностями" Windows, Linux, Solaris и т.д. Однако важно отметить, что в специализированных средах, таких как различные операционные системы реального времени, память не может быть освобождена при завершении программы.

Ответ 2

ОС, выполняющая вашу программу, обычно выполняет очистку памяти, которая не освобождается явно, и обрабатывает, которые не закрываются явно, но это не гарантируется стандартом C++. Вы можете найти какое-то встроенное устройство, которое не устраняет утечки памяти.

При этом Windows и все дистрибутивы Linux, которые я когда-либо видел, устраняют утечки памяти.

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


Другое соображение при использовании C++ заключается в том, что если вы не удаляете выделенную память для кучи, то ваши деструкторы также не вызываются. Иногда у вас будут и другие побочные эффекты, если ваши деструкторы не будут вызваны.

Ответ 3

Работаете ли вы на настольной ОС (Windows, Linux и т.д.)? Если да, да, в общем случае система освободит любую память, связанную с программой, когда программа выйдет.

Ответ 4

Обычно, да. Некоторые системы поддерживают такие вещи, как блоки разделяемой памяти, которые автоматически не освобождаются при выходе из программы. Большинство из них по-прежнему сохраняют счетчик ссылок и удаляют его, когда все программы, которые его открыли, выходят, но некоторые из них этого не делают (например, 16-битная Windows имела несколько типов элементов, которые оставались бы распределенными, даже если ничего не упоминалось в них, хотя он обычно разбивался по другим причинам, прежде чем достаточно накопилось, чтобы вызвать проблему...)

Ответ 5

Зависит от того, какую память вы просочились. Некоторая память не может быть восстановлена ​​ОС. Большая часть памяти на большинстве ОС, однако, будет автоматически восстановлена, когда процесс завершится.

Ответ 6

Насколько я знаю, современная операционная система освободит эту память после завершения программы.