什么限制了C#中的数组大小?

用户名

我想创建两个200M int元素数组。像那样:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Arr
{
    class Program
    {

        static void Main(string[] args)
        {

            int Min = 0;
            int Max = 10;
            int ArrSize = 200000000;

            int[] test2 = new int[ArrSize];
            int[] test3 = new int[ArrSize];

            Console.ReadKey();

        }
    }
}

但是,在VS2013下,我遇到了内存不足异常,其中黄色箭头指向int[] test3 = new int[ArrSize];在线。机器有12GB的RAM。

如果我将元素数量减少到150M,则不会引发异常。

如果仅初始化一个大小为200M的数组,则不会引发异常。

为什么?

本·沃格特

机器有12GB的RAM。

影响程序的速度(取决于可用空间的多少),但是物理内存大小对分配成功或失败没有影响。这取决于可用的地址空间。

如果您使用32位编译,特别是如果您不使用/LARGEADDRESSAWAREoption,那么您将只能分配少量大对象,因为它们必须容纳在单个2GB地址空间中,并且该空间已分解通过DLL和其他分配方式。

如果确实需要那么大的对象,则最好使用64位。对于32位程序,可以通过将对象分成较小的块来部分地解决此问题,从而增加找到足够大的地址空间自由区域的机会。

VS 2013中的C#控制台应用程序的默认设置为“ AnyCPU”,并带有“首选32位”。

您可以在项目属性->构建选项卡上更改此设置。 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果BigInteger的大小无限制,为什么C#中的BigInteger是结构?

来自分类Dev

将输入大小限制为C#中TextBox的大小

来自分类Dev

纹理数组大小的限制是什么?

来自分类Dev

C ++ C样式数组大小限制

来自分类Dev

如何限制MongoDB中的数组大小?

来自分类Dev

PostgreSQL中数组类型的大小/长度限制

来自分类Dev

C#中的值类型BigInteger的限制是什么?

来自分类Dev

什么限制了phpbb中徽标的大小?

来自分类Dev

C#中字符串数组的最大大小

来自分类Dev

为什么数组指针的大小在C中始终为8?

来自分类Dev

为什么Windows窗体大小与C#中的设置不同?

来自分类Dev

限制数组大小

来自分类Dev

如何限制 C# 中 HTML 文档的下载字符串的大小?

来自分类常见问题

C / C ++中的数组大小

来自分类Dev

在C ++中查找数组的大小

来自分类Dev

在C中声明数组的大小

来自分类Dev

在C ++中查找数组的大小

来自分类Dev

c中的大小和数组

来自分类Dev

如何在Mongoose模式中设置数组大小的限制

来自分类Dev

如何在 C# 中构建结构列表数组(具有预定义的数组大小)

来自分类Dev

在 C# 中查找受长度限制的 int[] 数组的所有可能组合

来自分类Dev

在 C# 中编组数组 - 为什么使用 AllocCoTaskMem 与 new []?

来自分类Dev

没有指定大小的 C# 数组

来自分类Dev

为什么C ++动态数组的大小不变?

来自分类Dev

将具有固定大小的数组的C ++结构编组到C#中

来自分类Dev

UIImageView中的大小限制?

来自分类Dev

什么是 Avro 数据大小限制?

来自分类Dev

C#中的调用堆栈限制

来自分类Dev

在C#方法中限制参数的值