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