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

时间:2019-08-01 03:21:06

标签: c++ linux out-of-memory

我可以为在Linux下运行的C ++程序分配多少内存?在我的测试案例中,使用newmalloc可以分配170Gb以上的内存。  作为比较,同一代码只能在Windows中分配1.8G,然后终止。

我的测试机是一个使用虚拟盒,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;
}

1 个答案:

答案 0 :(得分:0)

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