为什么我可以为数组分配比计算机实际拥有的内存更多的内存

Vit*_*you 7 c++ memory-management

我能够成功运行代码:

char* p = new char[34493878088];
cout << "Success at " << 34493878088 << " bytes" << endl;
delete[] p;
Run Code Online (Sandbox Code Playgroud)

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

h22*_*h22 1

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

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

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