数组中的最大元素数与最大索引器值

lhi*_*onk 8 c# arrays maxlength .net-4.5

今天我开始怀疑MSDN中的某些东西. 本文演示了如何增加.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),但是由于数组被a索引int而不是uint我无法访问数据的"上半部分"?

这让我很困惑,看起来我似乎缺少必要的东西.

我希望你能开导我

亲切的问候

编辑:

我知道我可以创建多维数组,但是长度为2e9且宽度为2的数组似乎有点愚蠢.不管多维数组是否映射到一维数组?

D S*_*ley 4

任意单一维度的最大索引为2,147,483,591

请记住,数组可以有多个维度,因此您可以拥有最多包含 4,294,967,295 个项目的二维数组,但每个维度的最大长度为 2,147,483,591。

因此,您可以拥有 2,147,483,591 X 2 数组,但不能拥有 1,000,000 X 1,000,000 数组。

  • @lhiapgpeonk 它们存储在一个连续的内存块中。这不完全是一回事。 (2认同)