C++ 程序使用的内存多于系统可用的内存?

C++ program using more memory than available on the system?

我编写了以下内存占用程序:

int main() {
    while(1) {
        auto* blah = new char[1024 * 1024 * 1024]{};
    }
    return 0;
}

据我所知,在循环的每次迭代中都会保留整整 GB 的内存。我原以为这会立即崩溃。但它以某种方式运行,直到我停止它。 检查我的系统时,我发现我的小程序占用的内存比我机器上可用的内存多,这怎么可能?这是怎么回事?

new 行后添加 blah[1024 * 1024 * 1024 - 1] = 127;。可能对未使用的内存块进行了优化。您是否尝试查看 (printf) 分配给 blah 的地址?

现代操作系统在内存分配方面可以很聪明,并且在您使用您尝试分配的内存之前不会实际分配任何东西。在这样的系统上 mallocnew 分配时不会失败,但是当您尝试使用内存时整个程序会崩溃 OS 告诉您它已分配,即使它实际上可以'吨。有关详细信息,请参阅 this