面试问答:
while(1)
{
void * a = malloc(1024*1024);
}
在 2 gb
和 8 gb
的内存上,这个循环会运行多少次?
我认为这是无限循环,因为即使内存已满也没有终止条件。但他不同意。我现在束手无策,请帮帮我。
malloc()
将返回0,因此循环将继续运行而不会改变分配的内存量。Linux允许内存过度承诺,以便malloc()
调用继续添加虚拟内存。当malloc()
用于管理内存的数据开始引起问题时(不是因为您尝试使用分配的内存本身,因为代码不使用它),进程可能最终被OOM Killer杀死,但问题中没有规定Linux作为平台。NULL
,使得循环变成无限循环。 - glglglNULL
阶段”的情况。很快就会出现。 - glglglmmap()
不再成功,并且使用“常规”堆。在2b8c814d1000(堆的末尾)和3f350c000000(mmap区域的开始)之间存在一个间隙,以及在7f35213e7000(mmap区域的末尾)和7fffaef10000(堆栈的开始)之间也存在一个间隙。显然,在这些内存区域之间的分配目的非常严格。 - glglgl
malloc()
会返回NULL
。 - user529758