Что происходит, когда виртуальная память исчерпана
Я публикую этот вопрос, так как не смог найти ответ на поиск в Google и переполнение стека...
Вопрос в том, что происходит, когда пространство подкачки виртуальной памяти исчерпано. Как ОС справляется с такой ситуацией, когда все ОЗУ и Виртуальная память исчерпаны.
Тайно ли он использует больше места на жестком диске, или уведомляет об исключении
2 ответа
Я собираюсь предположить, что под виртуальной памятью вы имеете в виду пространство подкачки (это технически разные понятия). Я могу думать о двух вещах:
Программа проверяет, чтобы убедиться, что распределение прошло успешно (т. Е. В C есть код возврата для malloc), и если оно не прошло успешно, то оно корректно завершится с появившимся однажды вездесущим сообщением об ошибке "Out of memory". Java и C++ имеют исключения для той же цели.
Программа не проверяет, потому что, действительно, кому больше не хватает памяти? (Это программист думает здесь.) Могу поспорить, что есть много программ, написанных там, которые не проверяют, успешно ли выполнен вызов malloc, и поэтому они пытаются использовать неверный указатель и вызвать память нарушение прав доступа, приводящее к завершению работы программы с хорошим сообщением "Эта программа обнаружила проблему" в Windows или кратким сообщением "Segfault" в Unix.
Я не уверен, как Windows справляется с этим, но в *nix системах ядро запускает программу OOM Killer (более подробную информацию можно найти здесь http://linux-mm.org/OOM_Killer)