Когда процесс завершится, будет ли возвращена память, оставшаяся без восстановления, ОС? - PullRequest
3 голосов
/ 17 ноября 2009

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

Ответы [ 2 ]

7 голосов
/ 17 ноября 2009

Это не столько вопрос C ++, сколько вопрос операционной системы.

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

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

1 голос
/ 17 ноября 2009

Для большинства современных операционных систем (большинство разновидностей unix и всего, что выполняется в защищенной памяти под x86), выделение памяти происходит в куче программы (либо через malloc для C, либо через new / delete для C ++). Поэтому при выходе из программы память будет освобождена для использования в другом месте.

...