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

标签 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;
}

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

最佳答案

.NET 对象大小有一个硬性上限,它们不能大于 2 GB。即使在 64 位操作系统上。您的数组远远超出了这个大小。

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

关于c# - 为什么在尝试创建大小为 int.MaxValue 的 int 数组时出现 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551348/

相关文章:

c# - 解压文件大小错误

c# - 在 WCF/WIF 中如何合并来自两个不同客户端的自定义 sts token 的声明

c# - 使用内部集合创建 where 谓词的动态查询

c# - 从不同的文件夹渲染部分(不共享)

c++ - 在 C++ 中构造对象后从对象中增加一个 int

javascript - 有没有办法比较 json 响应的数组名称?

php - CSS 中的多维数组 PHP

c - C中指针的问题

python - 类型错误:不支持的操作数类型 - : 'int' 和 'list'

c - 将字符串分配给 int 并将该 int 传递给 printf 如何正确打印字符串?