gpt4 book ai didi

memory - 当内核使用过度使用内存时,是否需要在分配内存后检查 NULL

转载 作者:IT王子 更新时间:2023-10-28 23:29:00 25 4
gpt4 key购买 nike

通常的做法是在 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(可能是第 3 方)中的一些框架源代码(C/C++)代码在分配后不会检查 NULL 也不会捕获 bad_alloc。我错过了什么吗?

SO 中有一些关于过度使用内存的线程,但没有一个能解决我的困惑。

编辑: 如果正在使用积极的过度使用,则不会返回 NULL(假设 1)。当没有可用的物理内存并且尝试访问分配的内存(写入分配的内存)时,OOM 将终止一些进程并为应用程序分配内存,直到它被依次终止(假设 2)。在任何一种情况下,我都认为不需要检查 NULL(内存被分配或进程被杀死)。我的假设是否正确?
便携性不是这个问题的关注点。

最佳答案

是的,您仍然应该检查 malloc 返回的故障。在过度使用内存的环境中,您将无法检测到故障并从故障中恢复,因为当您写入之前调用 malloc.

然而,这并不是导致 malloc 在传统环境中失败的唯一问题。当程序的地址空间变得碎片化时,即使有足够的总物理内存来满足请求,对特别大的内存块的请求也可能会失败。因为没有连续范围的空闲地址空间,malloc 必然失败。这种类型的失败必须由返回 NULLmalloc 发出信号,无论环境是否过度使用内存。

关于memory - 当内核使用过度使用内存时,是否需要在分配内存后检查 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com