Получают ли объекты в C / C ++ мусор после выхода из программы? - PullRequest
0 голосов
/ 25 февраля 2012

В C и C ++, предполагая, что я не использую умные указатели или какой-либо другой странный механизм сбора мусора, освобождается ли память (сборщик мусора) при выходе из программы?

Ответы [ 5 ]

7 голосов
/ 25 февраля 2012

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

Поскольку все его адресное пространство исчезает, все объекты в нем тоже.

Однако это не то же самое, что сборка мусора в C ++: деструкторы не вызываются. Память просто ... тихо возвращается в операционную систему.

3 голосов
/ 25 февраля 2012

Практически на всех платформах все ресурсы, которыми владеет процесс, восстанавливаются ОС при выходе из процесса (определенные виды общих ресурсов, например SYSV-IPC, не выдерживают).

1 голос
/ 25 февраля 2012

Это не указано в C.

Стандарт C ничего не говорит об этом, но обычная ОС освобождает память для вас.

1 голос
/ 25 февраля 2012

Память вообще не собирает мусор в C ++, деструкторы не запускаются и т. Д. Однако, как часть очистки процесса при выходе из программы, она освобождает любую память или другие использованные ресурсы. по программе. Другими ресурсами могут быть блокировки, общая память, сетевые подключения, файловые дескрипторы и т. Д.

1 голос
/ 25 февраля 2012

Да, любая свободная память будет автоматически освобождена операционной системой при выходе из программы. Это означает, что обычно безопасно вызывать exit() в любое время, хотя вы должны быть осторожны с другими ресурсами, которые не освобождаются автоматически, такими как глобальные атомы в Windows и именованные каналы и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...