首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux上的C程序耗尽内存

Linux上的C程序耗尽内存
EN

Stack Overflow用户
提问于 2009-12-08 16:26:52
回答 10查看 20.1K关注 0票数 21

我想写一个程序来消耗所有可用的内存来理解结果。我听说linux一旦无法分配内存就开始杀死进程。

有没有人能帮我完成这样的程序。

我写了以下代码,但内存似乎没有耗尽:

代码语言:javascript
复制
#include <stdlib.h>

int main()
{
        while(1)
        {
                malloc(1024*1024);
        }
        return 0;
}
EN

回答 10

Stack Overflow用户

发布于 2009-12-08 16:35:09

您应该写入已分配的块。如果您只是请求内存,linux可能只会给出一个内存预留,但在访问内存之前什么都不会分配。

代码语言:javascript
复制
int main()
{
        while(1)
        {
                void *m = malloc(1024*1024);
                memset(m,0,1024*1024);
        }
        return 0;
}

不过,您实际上只需要在每个页面上写入1个字节(通常在x86上为4096字节)。

票数 13
EN

Stack Overflow用户

发布于 2009-12-08 16:31:49

Linux“过量提交”内存。这意味着物理内存仅在进程第一次尝试访问它时才会分配给该进程,而不是在第一次执行malloc时分配给。要禁用此行为,请执行以下操作(以root用户身份):

代码语言:javascript
复制
echo 2 > /proc/sys/vm/overcommit_memory

然后试着运行你的程序。

票数 10
EN

Stack Overflow用户

发布于 2009-12-08 16:33:07

默认情况下,Linux使用的是我所说的“机会主义分配”。这是基于这样的观察,即许多实际程序分配的内存比它们实际使用的内存多。Linux使用它来将更多的东西放入内存:它只在使用时分配内存页面,而不是在使用malloc (或mmap或sbrk)分配内存页面时分配。

如果你在循环中这样做,你可能会获得更多的成功:

代码语言:javascript
复制
memset(malloc(1024*1024L), 'w', 1024*1024L);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1865501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档