Пропущенная память освобождена, когда программа выходит?

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

100
задан Martijn Courteaux 7 September 2017 в 21:00
поделиться

6 ответов

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

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

127
ответ дан 24 November 2019 в 04:52
поделиться

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

13
ответ дан 24 November 2019 в 04:52
поделиться

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

9
ответ дан 24 November 2019 в 04:52
поделиться

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

3
ответ дан 24 November 2019 в 04:52
поделиться

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

3
ответ дан 24 November 2019 в 04:52
поделиться

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

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

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


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

31
ответ дан 24 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: