我想写一个程序来消耗所有可用的内存来理解结果。我听说linux一旦无法分配内存就开始杀死进程。
有没有人能帮我完成这样的程序。
我写了以下代码,但内存似乎没有耗尽:
#include <stdlib.h>
int main()
{
while(1)
{
malloc(1024*1024);
}
return 0;
}发布于 2009-12-08 16:35:09
您应该写入已分配的块。如果您只是请求内存,linux可能只会给出一个内存预留,但在访问内存之前什么都不会分配。
int main()
{
while(1)
{
void *m = malloc(1024*1024);
memset(m,0,1024*1024);
}
return 0;
}不过,您实际上只需要在每个页面上写入1个字节(通常在x86上为4096字节)。
发布于 2009-12-08 16:31:49
Linux“过量提交”内存。这意味着物理内存仅在进程第一次尝试访问它时才会分配给该进程,而不是在第一次执行malloc时分配给。要禁用此行为,请执行以下操作(以root用户身份):
echo 2 > /proc/sys/vm/overcommit_memory然后试着运行你的程序。
发布于 2009-12-08 16:33:07
默认情况下,Linux使用的是我所说的“机会主义分配”。这是基于这样的观察,即许多实际程序分配的内存比它们实际使用的内存多。Linux使用它来将更多的东西放入内存:它只在使用时分配内存页面,而不是在使用malloc (或mmap或sbrk)分配内存页面时分配。
如果你在循环中这样做,你可能会获得更多的成功:
memset(malloc(1024*1024L), 'w', 1024*1024L);https://stackoverflow.com/questions/1865501
复制相似问题