Что происходит с памятью, которая не освобождается после завершения программы?

Дубликат: Что ДЕЙСТВИТЕЛЬНО происходит, когда вы не освободить после malloc?

Скажем, например:

int main()
{
  char* test = new char[50000];
  return 0;
}

Что происходит с выделенной памятью после завершения программы? Он сразу же освобождается для других приложений? Или, может быть, через какое-то время? Или, может быть, это потеряно для системы навсегда? Или он переключается на диск, чтобы никогда не вернуться в ОЗУ? А может что-то совсем другое?

Я хотел бы знать, что происходит в трех основных ОС: Windows (XP и выше, если есть различия), Linux, Mac OS X.


person GhassanPL    schedule 14.05.2009    source источник


Ответы (7)



На любой ОС с MMU (включая Unix, Linux, OSX и семейство Windows NT) процесс имеет структуру данных, которая используется для настройки сопоставления страниц для MMU. Когда процесс завершается, это сопоставление освобождается, и страницы добавляются в свободный пул операционной системы.

На платформах O / S с незащищенной памятью, таких как DOS или в некоторых операционных системах реального времени, может потребоваться явное освобождение памяти, а пул O / S может привести к утечке памяти, если он не будет приведен в порядок.

person ConcernedOfTunbridgeWells    schedule 14.05.2009

Все эти моменты будут потеряны во времени ...
как слезы под дождем

- Рой Бэтти в Blade Runner

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

person David Rodríguez - dribeas    schedule 14.05.2009

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

person Daniel Huckstep    schedule 14.05.2009

ОС должна вернуть его в системную память после завершения процесса, использующего ее.

person workmad3    schedule 14.05.2009

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

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

person ChrisF    schedule 14.05.2009

Ответ, конечно, будет зависеть от операционной системы, но, как правило, ОС будет обрабатывать всю оставшуюся выделенную / отображаемую память, когда программа завершается. В случае Linux очистка будет завершена до того, как процесс завершится (перейдет в состояние Z).

person bdonlan    schedule 14.05.2009