Это общая практика для проверки NULL (независимо от того, успешно распределенная памяти) после таНоса(), некоторые вещи, какЕсть ли необходимость проверить на NULL после выделения памяти, когда ядро использует overcommit модуля памяти
void *ptr = malloc(10);
if (ptr != NULL) {
// do some thing usefull
} else {
// no memory. safely return/throw ...
}
с включенной памятью ядра в ядре, есть ли шанс получить NULL? Должен ли я следовать практике религиозной проверки NULL для каждого распределения? Будет ли malloc возвращать NULL, несмотря на агрессивный механизм overcommit (я думаю, значение 1)?
На самом деле ядро Android использует overcommit памяти (не уверен в значении, хотел бы знать его (превышение значения) и его значение). Некоторый код исходного кода (C/C++) в Android (может быть сторонним) не проверяет наличие NULL и не вылавливает bad_alloc после выделения. Я что-то упускаю?
Есть некоторые темы в SO относительно памяти overcommit, но никто из них не разрешил мое замешательство.
EDIT: Если применяется агрессивный сверхкомпьютер, то NULL не будет возвращен (предположение 1). Когда нет физической памяти и не пытается получить доступ к выделенной памяти (запись в выделенную память), OOM убьет некоторый процесс и распределит память для приложения, пока он не будет убит по очереди (предположение 2). В любом случае я не вижу необходимости в том, чтобы набрать NULL (выделение памяти или удаление процесса). Я прямо в своих предположениях?
Переносимость не вызывает беспокойства по этому вопросу.
Что такое * overcommit memory *? Если вы говорите о файле страницы на устройстве, то NO, Android (и другие мобильные устройства) обычно не используют файл страницы. Это потому, что записи будут изнашивать NAND или флэш-память SSD раньше. Или вы говорите о симуляторах и гипервизорах? – jww