malloc()の後にNULL(メモリが正常に割り当てられているかどうか)をチェックするのが一般的な方法です。
void *ptr = malloc(10);
if (ptr != NULL) {
// do some thing usefull
} else {
// no memory. safely return/throw ...
}
カーネルでメモリオーバーコミットが有効になっている場合、NULLになる可能性はありますか?割り当てごとにNULLを宗教的にチェックする慣行に従う必要がありますか?積極的なオーバーコミットメカニズムにもかかわらず、mallocはNULLを返しますか(値1だと思います)?
実際のところ、Androidカーネルはメモリのオーバーコミットを使用します(値がわからない場合は、それ(オーバーコミット値)とその重要性を知りたいと思います)。Androidのフレームワークソース(C / C ++)コードの一部(サードパーティの可能性があります)は、NULLをチェックせず、割り当て後にbad_allocをキャッチしません。私は何かが足りないのですか?
オーバーコミットメモリに関してSOにはいくつかのスレッドがありますが、それらのどれも私の混乱を解決しませんでした。
編集:積極的なオーバーコミットが採用されている場合、NULLは返されません(仮定1)。使用可能な物理メモリがなく、割り当てられたメモリにアクセスしようとすると(割り当てられたメモリに書き込む)、OOMはプロセスを強制終了し、アプリケーションが強制終了されるまでメモリをアプリケーションに割り当てます(仮定2)。どちらの場合でも、NULLをチェックする必要はありません(メモリが割り当てられるか、プロセスが強制終了されます)。私は私の仮定に正しいですか?
移植性はこの質問の問題ではありません。