为什么在尝试创建大小为int.MaxValue的int数组时会出现OutOfMemoryException

Sae*_*ani 4 c# arrays int

我试图创建一个数组,其中包含所有可能的正整数,我尝试了以下代码,它总是抛出内存异常.

private int[] AllIntegers()
{
    int[] all = new int[int.MaxValue];

    for (int i = 0; i < int.MaxValue; i++)
    {
        all[i] = i;
    }

    return all;
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?或者这根本不可能?!

Han*_*ant 8

.NET对象大小有一个硬上限,它们不能超过2千兆字节.即使在64位操作系统上也是如此.你的阵列远远超出了那个大小.

在32位操作系统上,您将永远无法接近该限制,可用的最大连续虚拟内存大约为650兆字节,可用或接受.只有在启动时,这才会迅速下山.这是地址空间碎片的副作用,这是由地址空间中混合了代码和堆引起的.只要每个分配的大小足够小,您可以分配的内存总量接近2千兆字节.不是你想要接近的东西,由于OOM导致的随机程序失败很难处理.