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

дублировать: что на самом деле происходит, когда вы не свободны после malloc?

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

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

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

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

7 ответов



на любом O / S с MMU (который включает Unix, Linux, OSX и семейство Windows NT) процесс имеет структуру данных, которая используется для настройки сопоставлений страниц для TBE MMU. После завершения процесса это сопоставление освобождается и страницы добавляются в свободный пул операционной системы.

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


все эти моменты будут потеряны во времени...
как слезы под дождем!--3-->
-- Рой Бэтти в Бегущий По Лезвию

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


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


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


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

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


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