一个程序可以分配多少内存?

5
我能为在Linux下运行的C++程序分配多少内存?在我的测试中,使用newmalloc可以分配超过170Gb的内存。相比之下,同样的代码在Windows下只能分配1.8G然后终止。
我的测试机器有两个,一个是使用VirtualBox的虚拟机,CentOS7 64位,2Gb内存。主机是Win10 64位,内存为8Gb。
使用free命令的截图, enter image description here 以下是测试代码:
#include<iostream>
#include <unistd.h>

 #define EVERY_ALLOC_MEM 1024 * 1014 // 1Mb
int main(int argc, char *argv[])
{
    std::cout << getpid() << ":" << argv[0] << std::endl;
    for (size_t i = 0; ; i++)
    {
        //char* mem = new char[EVERY_ALLOC_MEM];
        char* mem = (char*)malloc(EVERY_ALLOC_MEM);
        std::cout << "used " << i  << "Mb, that is " << i * 1024 << "Kb, and " << (float)i/1024 << "Gb"<< std::endl;       
    }
    return 0;
}

4
你所看到的是Linux的乐观内存分配行为:https://dev59.com/Nofca4cB1Zd3GeqPi3O9 - Jeremy Friesner
我测试了'cat /proc/sys/vm/overcommit_memory',结果是零,这意味着当用户空间请求更多内存时,内核会评估当前可用的空闲内存量,如果足够,则可以分配,否则会失败。所以我仍然感到困惑。 - tocky
1个回答

0

这确实是Linux的内存优化技术。如果您尝试写入已分配的内存,例如memset(mem, 0, EVERY_ALLOC_MEM),它将被揭示。这与页面错误有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接