Если я запрограммировал - не зная об этом - утечку памяти, и приложение завершает работу, освобождена ли утечка памяти?
c++
memory-leaks
Мартин Курто
источник
источник
Ответы:
Да, «утечка памяти» - это просто память, на которую процесс больше не ссылается и, следовательно, не может больше освобождаться. ОС по-прежнему отслеживает всю память, выделенную процессу, и освобождает ее, когда этот процесс завершается.
В подавляющем большинстве случаев ОС освобождает память - как в случае с обычными «разновидностями» Windows, Linux, Solaris и т. Д. Однако важно отметить, что в специализированных средах, таких как различные операционные системы реального времени, память не может быть освобождена при завершении программы.
источник
ОС, выполняющая вашу программу, обычно очищает память, которая не освобождается явно, и обрабатывает, что не закрывается явно, но это не гарантируется стандартом C ++. Вы можете найти какое-то встроенное устройство, которое не освобождает утечки памяти.
При этом Windows и все дистрибутивы Linux, которые я когда-либо видел, освобождают утечки памяти.
Вы можете легко создать огромный цикл утечек памяти, чтобы проверить это самостоятельно. Наблюдайте за ростом использования ОЗУ, а затем закройте программу. Вы увидите, что использование ОЗУ снова снизилось.
Еще одно соображение при использовании C ++ заключается в том, что если вы не удаляете выделенную память из кучи, ваши деструкторы также не вызываются. Иногда у вас будут и другие побочные эффекты, если ваши деструкторы не будут вызваны.
источник
Вы используете настольную ОС (Windows, Linux и т. Д.)? Если да, то, как правило, система освобождает всю память, связанную с программой, при выходе из программы.
источник
Обычно да. Некоторые системы поддерживают такие вещи, как блоки разделяемой памяти, которые не освобождаются автоматически при выходе из программы. Большинство по-прежнему ведут счетчик ссылок и удаляют его, когда все программы, открывшие его, завершают работу, но некоторые этого не делают (например, в 16-битной Windows было несколько типов элементов, которые оставались бы выделенными, даже если к ним ничего не относилось - хотя обычно он ломался по другим причинам, прежде чем накопилось достаточно, чтобы вызвать проблему ...)
источник
Насколько мне известно, современная операционная система освобождает эту память после завершения работы программы.
источник
Зависит от того, какую память вы слили. Операционная система не может освободить часть памяти. Однако большая часть памяти в большинстве ОС будет автоматически освобождена при выходе из процесса.
источник