什么是进程堆内存的上限?

28 浏览
0 Comments

什么是进程堆内存的上限?

这个问题已经有了答案:

为什么这个内存消耗者实际上并没有真正消耗内存?

大家好,有人知道在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日
0
0 Comments

感谢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

0