如何耗尽记忆力?

Wil*_*Lou 4 c++ memory-management new-operator

它可能看起来很傻,但我现在对此感到困惑.为什么这个程序不会占用所有内存?例如:我在Linux(2G RAM)终端中运行以下程序,

  #include <iostream>
  #include <cmath>
  using namespace std;

  int main()
  {
     cout<<sizeof(int*)<<endl;
     for(int i=0; i<pow(2.0,30.0);i++)
       {
         new int(i);
       }
    return 1;
  }
Run Code Online (Sandbox Code Playgroud)

1)我确认这台机器的int大小是4个字节,然后对于2GB ram,它只能容纳2 ^ 30/2 ^ 2 = 2 ^ 28

2)按照上面的逻辑,你怎么能改变程序实际消耗所有的2GB内存?

补充:我只是想确保我理解正确.如果没有虚拟内存或操作系统优化等..,2GBRAM只能容纳2 ^ 28 int,是吗?在这种情况下,上述程序将消耗所有内存?你知道我怎么能在Linux中关闭虚拟内存/交换内存功能等吗?

谢谢!

Nic*_*las 7

由于虚拟寻址,您可以分配比实际拥有的RAM更多的内存.操作系统将自动分页您不使用的内存(到硬盘).通过这种方式,您的RAM可用作硬盘交换文件的大缓存,该文件代表系统的实际内存.

您的实际限制是指针的地址空间,除非您为64位平台编译(并运行),否则该指针的地址空间为32位.所以你可以分配4GB的空间.