Общепринято проверять значение 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/С++) в Android (может быть сторонним) не проверяет наличие NULL и не вылавливает bad_alloc после выделения. Я что-то пропустил?
В SO есть некоторые потоки в отношении памяти overcommit, но никто из них не разрешил мое замешательство.
EDIT: Если применяется агрессивный overcommit, NULL не будет возвращен (предположение 1). Когда нет физической памяти и не пытается получить доступ к выделенной памяти (запись в выделенную память), OOM убьет некоторый процесс и распределит память для приложения, пока он не будет убит по очереди (предположение 2). В любом случае я не вижу необходимости в том, чтобы набрать NULL (выделение памяти или удаление процесса).
Я прямо в своих предположениях?
Переносимость не является проблемой для этого вопроса.