通常的做法是在 malloc() 之后检查 NULL(内存是否已成功分配),例如
void *ptr = malloc(10);
if (ptr != NULL) {
// do some thing usefull
} else {
// no memory. safely return/throw ...
}
在内核中启用内存过量使用后,是否有机会获得 NULL?我应该遵循虔诚地检查每个分配的 NULL 的做法吗?尽管存在积极的过度使用机制(我猜值为 1),malloc 会返回 NULL 吗?
事实上,Android内核使用内存过度使用(不确定该值,很想知道它(过度使用值)及其意义)。Android(可能是第 3 方)中的一些框架源代码(C/C++)代码在分配后不会检查 NULL 也不会捕获 bad_alloc。我错过了什么吗?
SO中有一些关于过度使用内存的线程,但没有一个能解决我的困惑。
编辑:如果正在使用积极的过度使用,则不会返回 NULL(假设 1)。当没有可用的物理内存并且尝试访问分配的内存(写入分配的内存)时,OOM 将终止一些进程并为应用程序分配内存,直到它被依次终止(假设 2)。在任何一种情况下,我都认为不需要检查 NULL(内存被分配或进程被杀死)。我的假设是否正确?
便携性不是这个问题的关注点。