在堆上分配巨大的数组;程序不会崩溃并且编译没有错误

Allocating enormous array on heap; program doesn't crash and compiles without error

我在 Code::Blocks 中胡思乱想,并试图在堆上创建一个巨大的整数数组。我惊奇地发现代码编译成功了,甚至 运行 都没有崩溃。认为这只是 GCC/Code::Blocks,我也在 Visual C++ 中尝试过。令人惊讶的是,它编译并且 运行 使用 Visual Studio 也很好。我检查了任务管理器,这个过程甚至没有占用太多内存。为什么这是允许的,这样的数组是如何分配的?

int main() {

    int* arr = new int[1024 * 1024 * 1024 * 1024 * 1024];

}

Code::Blocks 给我以下警告:

warning: integer overflow in expression [-Woverflow]

如果它就此警告我,为什么编译器不尝试阻止我创建数组?

您没有分配那么大的数组。你的号码溢出并环绕到更小的东西。

这样做:

size_t sz = 1024 * 1024 * 1024 * 1024 * 1024;
cout << sz << endl;
int * arr = new int [sz];

看看会发生什么。

也就是说,您的程序是有效的。因此,编译器应该对其进行编译并生成代码。

感谢用户 三十二上校yzt,表达式在打印时由于整数溢出而计算为 0。这导致创建了一个大小为 0 的数组,没有产生 compiler/run-time 错误。