Я думаю, это во многом зависит от типа приложений, которые вы пишете. Если бы я написал что-то, что не влияет на глобальную стабильность системы, скажем, игру или проигрыватель фильмов, я бы не стал проверять это исключение. Мое приложение будет вызывать std::terminate
, и я могу его где-нибудь зарегистрировать, или мое ядро сначала убьет мою программу, чтобы освободить место для других программ.
Если я напишу программу, чья стабильность напрямую соответствует системе, в которой она работает, скажем, видеодрайверу или системе инициализации, я бы все время проверял наличие исключений в памяти (возможно, оборачивая выделения в функции), и получить некоторую память из предварительно выделенного пула в случае сбоя выделения.
Я думаю, что все зависит от пропорциональности. Что вы получаете от удивительно стабильного проигрывателя фильмов, если он начинает замедляться при воспроизведении фильмов из-за вашей агрессивной проверки?
Кстати, кто-то ответил, что malloc не вернет 0, если у вас недостаточно памяти для некоторых систем. Это верно, но, как указывает руководство по malloc (специфично для Linux)
В случае, если Linux используется в обстоятельствах, когда было бы менее желательно внезапно потерять некоторые случайно выбранные процессы, и, кроме того, версия ядра является достаточно новой, можно отключить это чрезмерное выполнение, используя команду, подобную: $ echo 2 > /proc/sys/vm/overcommit_memory
См. Также каталог документации ядра, файлы vm / overcommit-accounting и sysctl / vm.txt.