这个循环运行多少次?

joe*_*han 10 c memory loops

采访问问题:

while(1)
{
void * a = malloc(1024*1024); 
}
Run Code Online (Sandbox Code Playgroud)

这个循环在2 gb撞锤和8 gb撞锤上运行多少次?

我说无限循环,因为即使内存已满,也没有终止条件.他不同意.我现在不知道.请帮忙.

Jon*_*ler 9

它应该无限期地运行.在大多数平台上,当没有更多可用内存时,malloc()将返回0,因此循环将继续运行而不会更改分配的内存量.Linux允许内存过度使用,以便malloc()调用继续添加到虚拟内存.当malloc()用于管理内存的数据开始引起问题时,该进程可能最终被OOM Killer杀死(这不是因为您尝试使用已分配的内存,因为代码不使用它),但Linux不是在问题中规定了平台.

  • @joeyrohan在那个*旧的编译器中,你肯定会在某个时候得到"NULL",这使得循环确实无穷无尽. (2认同)