【发布时间】:2012-05-12 07:30:36
【问题描述】:
我正在复习 c,重做一些旧练习并在运行这个 sn-p 时得到一些不寻常的结果(我知道它会泄漏,但想知道系统允许多少..)
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
void *page = 0; int index;
index = 0;
while(1)
{
page = malloc(1073741824); //1GB
if(!page)break;
++index;
}
printf("memory failed at %d\n",index);
return 0;
}
我实际上得到了:
内存在 131070 失败
这表明它认为它分配了 131070 x 1GB 内存(大量泄漏)
我之前理解 malloc 在消耗所有虚拟内存之前应该会失败,当然如果我尝试在一个块中 malloc 20GB 会失败。
我的设置: Ubuntu 10 8Gb 内存,
任何人都知道它如何泄漏比我更多的内存
【问题讨论】:
-
这里的答案很大程度上取决于您使用的操作系统,因为有些(著名的 linux)愿意“过度提交”,这意味着如果有一个 地址,malloc 将返回成功可用而无需过多担心内存的可用性
-
建议:您可能想使用 mallinfo 进行检测:gnu.org/software/libc/manual/html_node/…
-
amd64 和 ulimit 确实说最大内存无限制,但是它怎么能超过 HD 1TB 限制呢
-
Linux 就是这样一个乐观主义者。它希望在您尝试使用其他部分之前,您将完成一些您请求的内存(因此它必须实际使它们可用)。
-
我认为 Firefox 开发人员正在尝试这个完全相同的测试,但他们忘记在发布版本中将其注释掉......
标签: c++ c memory memory-management memory-leaks