为什么我可以为阵列分配比计算机实际更多的内存

时间:2020-06-29 06:04:58

标签: c++ memory-management

我能够成功运行代码:

char* p = new char[34493878088];
cout << "Success at " << 34493878088 << " bytes" << endl;
delete[] p;
据我了解,

会分配一个34 GB的char数组。但是,我的计算机只有16 GB的内存,而页面文件只有3 GB,这怎么可能?

1 个答案:

答案 0 :(得分:0)

保留的地址空间(“虚拟内存”)没有立即映射到物理内存中。这会延迟到访问内存为止。

当您第一次访问内存位置时,首先会发生页面错误中断,然后内核才会配置内存控制器(这是硬件,是CPU的一部分)以为程序放置物理内存页在该地址位置。然后,该程序将从被中断的位置恢复,并且看不到这些情况的发生。

地址空间中被正式保留但从未访问过的区域不会使用实际的物理内存,并且可能大于可用的物理内存量。