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中关闭虚拟内存/交换内存功能等吗?
谢谢!
由于虚拟寻址,您可以分配比实际拥有的RAM更多的内存.操作系统将自动分页您不使用的内存(到硬盘).通过这种方式,您的RAM可用作硬盘交换文件的大缓存,该文件代表系统的实际内存.
您的实际限制是指针的地址空间,除非您为64位平台编译(并运行),否则该指针的地址空间为32位.所以你可以分配4GB的空间.