【发布时间】:2016-10-05 04:17:46
【问题描述】:
我正在尝试初始化尽可能多的内存(所有可用内存),而不是休眠 10 秒并释放它。 Calloc 初始化它,它超过了 7800 MB,超出了我的 8GB,所以我认为它可以完成工作,但问题开始于(只要我正在阅读论坛和其他东西)OOM 杀手来杀死它。所以进程被杀死而不是 calloc 返回 NULL。 有什么解决办法吗?如何在杀死之前停止它或在内存不足时如何返回NULL?
int main() {
int *pointer;
int megabajti=1048576; //MB
int velikost_strani=4096; //page size
long long int i=0;
while(1)
{
pointer=calloc(velikost_strani,sizeof(int));
printf("Trenutno alociram %lld MB\n",i*velikost_strani*sizeof(int)/megabajti);
if(pointer==NULL)
{
printf("Max velikost je %lld MB\n",i*velikost_strani*sizeof(int)/megabajti);
free(pointer);
sleep(10);
}
++i;
}
return 0;
}
【问题讨论】:
-
1000000000000不适合int如果它是 32 位长。 -
我只是编辑了代码并改用了while。谢谢,结果还是一样
-
将错误类型的数据传递给
printf()将调用未定义的行为。转换为所需的类型将使其安全。 -
这都是依赖于系统的东西...... OOM 杀手并不是一个 posix 结构......
-
你正在使用
calloc()来初始化内存。所以我删除了我的评论。对不起。无论如何,您可能想让自己对“Overcommitting”的概念感到满意。
标签: c malloc dynamic-memory-allocation calloc memset