我正在尝试创建一个包含所有可能正整数的数组,我尝试了以下代码,它总是抛出内存不足异常。
private int[] AllIntegers()
{
int[] all = new int[int.MaxValue];
for (int i = 0; i < int.MaxValue; i++)
{
all[i] = i;
}
return all;
}
我做错了什么?或者这根本不可能?!
最佳答案
.NET 对象大小有一个硬性上限,它们不能大于 2 GB。即使在 64 位操作系统上。您的数组远远超出了这个大小。
在 32 位操作系统上,您永远不会接近该限制,可用的最大连续虚拟内存块大约为 650 兆字节,或多或少。只有在启动时,它才会迅速下坡。这是地址空间碎片的副作用,由地址空间中的代码和堆混合引起。您可以分配的内存总量接近 2 GB,只要每次分配的大小足够小即可。这不是你想要接近的东西,由于 OOM 导致的随机程序失败很难处理。
关于c# - 为什么在尝试创建大小为 int.MaxValue 的 int 数组时出现 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551348/