什么是进程堆内存的上限?
什么是进程堆内存的上限?
这个问题已经有了答案:
大家好,有人知道在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的内存的?
admin 更改状态以发布 2023年5月23日
感谢Nate Eldredge指出为什么这个内存耗尽器实际上并没有耗尽内存?实际上只有在我们写入一些数据时才会消耗内存,当我将程序进行修改时,它实际上在我的PC的RAM被完全消耗后退出了(在4GB RAM系统中,我的PC的RAM约为3GB,我猜测1GB是保留给内核的)。\n
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