今天我开始怀疑MSDN中的某些内容。 This article演示了如何增加.NET 4.5和x64下的数组可分配的内存。这是一个很好的功能,但微软提供的描述中有些东西会阻止我。
在“备注”一节中,他们说:
对于字节数组和单字节结构数组,任何单个维度的最大索引为2,147,483,591(0x7FFFFFC7),其他类型为2,146,435,071(0X7FEFFFFF)。
由于我主要拥有int[]
或double[]
,因此后一个数字与我的索引相关。我可以使用int[] TestArray = new int[2146435071]
创建一个数组,这很好。但是,在同一部分,微软声明:
数组中的最大元素数是UInt32.MaxValue。
哪个(根据MSDN):
此常量的值为4,294,967,295;也就是十六进制0xFFFFFFFF。
现在。如果我做对了,我可以有一个最多包含4,294,967,295个元素的数组(例如ints
),但是由于数组被int
索引而不是uint
我不是能够访问我的数据的“上半部分”吗?
这让我很困惑,很奇怪我似乎在这里缺少必要的东西。
我希望你能开导我
亲切的问候
编辑:
我知道我可以创建多维数组,但是长度为2e9且宽度为2的数组似乎有点愚蠢。不管多维数组是否映射到一维数组?
答案 0 :(得分:4)
任何单一维度的最大指数 为2,147,483,591
请记住,数组可以有多个维度,因此可以拥有最多包含4,294,967,295个项目的二维数组,但每个维度的最大长度为2147483591。
所以你可以拥有2,147,483,591 X 2阵列,但不能拥有1,000,000 X 1,000,000阵列。