进程堆内存的上限是多少?



嗨,有人知道linux进程中堆分配的上限是多少吗?考虑下面的例子,

int main() {
char *p;
unsigned long int cnt=0;
while(1) {
p = (char*)malloc(128*1024*1024); //128MB
cnt++;
cout <<cnt<<endl;
}
return 0;
}

这个程序只会在大约200000次迭代后被杀死,这意味着它分配128MB*200000=~25TB,我的系统本身有512gb的SSD + 6GB的RAM,这个程序如何能够分配25TB的内存?

感谢Nate Eldredge指出为什么这个内存吞噬者不真正地吞噬内存?它实际上只消耗内存,如果我们写一些数据到它,当我修改上面的程序像这样,它实际上退出后,我的PC的RAM被完全消耗(这是~3GB在4GB RAM系统,我猜1 GB RAM保留给内核)

int main() {
char *p;
unsigned long int cnt=0;
size_t i=0, t = 128*1024*1024;
while(1) {
p = (char*)malloc(t);
#if 1
for (int i=0;i<t;i++)
*p++ = '0'+(i%65);
#endif
cnt++;
cout <<cnt<<endl;
}
return 0;
}

最新更新