当我测试它时,我的计算机尽力为我的程序提供最多的内存。然后我的计算机崩溃了。但我记得如果它持续需要太多内存,ubuntu 会终止这个过程。为什么会变成这样?
/*I write the code to test how much memory can my computer provide the most*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m = 0 ;
while( malloc(1 << 20) )
{
printf ("%d MB\n", ++m) ;
}
return 0 ;
}
答案1
由于内存并未分配,而只是保留,因此这将填满系统的其他部分,如页表,但不会填满物理内存。内存不足杀手处理。在泄漏内存块之前,请尝试对其使用 memset()。
您可能还想了解 /proc/sys/vm/overcommit_memory
从:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
过度使用内存:
该值包含一个启用内存过量使用功能的标志。
当此标志为 0 时,内核会尝试估计用户空间请求更多内存时剩余的可用内存量。
当此标志为 1 时,内核假装总是有足够的内存,直到真正用完为止。
当此标志为 2 时,内核使用“永不过度使用”策略,试图防止任何内存过度使用。请注意,user_reserve_kbytes 会影响此策略。
这个特性非常有用,因为有很多程序“以防万一”会 malloc() 分配大量内存,但实际上并没有使用太多。
默认值为 0。