2015-03-25 2 views
0

В C люди часто проверяют нулевые указатели после использования malloc. Однако в C++ мы будем использовать «новый». Я сделал некоторый поиск и одно объяснения разницы между таНосом и новым ниже: https://isocpp.org/wiki/faq/freestore-mgmt#new-malloc-diffКто обрабатывает сбой «нового» выделения памяти C++?

Цитата из ссылки выше:

таНоса() сообщает исчерпание памяти, возвращая 0. нового распределения отчетов и ошибки инициализации путем исключения исключений (bad_alloc).

Но как ОС (Linux или Windows) реагирует на это исключение bad_alloc?

+1

ОС не реагирует на эти вещи. Это * причина * этих вещей. ОС отклоняет попытку выделения памяти. Найдите 'VirtualAlloc',' HeapAlloc', 'mmap' и' sbrk'. –

+0

@ ZanLynx: Почему вы отвечаете на _comment_? Используйте раздел ответа. –

+0

@LightnessRacesinOrbit: Потому что уже есть хороший ответ, и я просто хотел ответить на одну часть вопроса. –

ответ

6

Это не так. ОС не нужно «реагировать» ни на что. Ваша программа может захотеть отреагировать на это условие или может оставить исключение необработанным и прекратить действие. В любом случае, память не была выделена, и ОС больше не волновала, если бы она заботилась (или даже знала об этом) в первую очередь!

+1

«ОС больше не заботится». Возможно, он даже не знал, что что-то случилось, небольшие выделения редко достигают уровня ОС. –

+0

Это не совсем правильно. В Linux есть OOM-убийца, задача которого состоит в том, чтобы убить процесс (ы) в случае отсутствия памяти. –

+4

@SeverinPappadeux: И это совершенно не имеет значения. –

Смежные вопросы