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

C# 数组中的最大元素数与最大索引器值,c#,arrays,.net-4.5,maxlength,C#,Arrays,.net 4.5,Maxlength,今天我开始怀疑MSDN中的一些东西。 演示如何增加.NET 4.5和x64下的数组可分配的内存。这是一个很好的特性,但是微软提供的描述中有一些东西让我很反感 在“备注”一节中,他们说: 对于字节数组和单字节结构数组,任何单个维度的最大索引为2147483591(0x7FFFFFC7),对于其他类型的数组,最大索引为2146435071(0x7FFFFF) 因为我主要有int[]或double[]这两个数字与我的索引相关。我可以使用int[]TestArray=new int[2146435071

今天我开始怀疑MSDN中的一些东西。 演示如何增加.NET 4.5和x64下的数组可分配的内存。这是一个很好的特性,但是微软提供的描述中有一些东西让我很反感

在“备注”一节中,他们说:

对于字节数组和单字节结构数组,任何单个维度的最大索引为2147483591(0x7FFFFFC7),对于其他类型的数组,最大索引为2146435071(0x7FFFFF)

因为我主要有
int[]
double[]
这两个数字与我的索引相关。我可以使用
int[]TestArray=new int[2146435071]
创建一个数组,这很好。但是,在同一节中,Microsoft声明:

数组中的最大元素数为UInt32.MaxValue

即(根据MSDN):

该常数的值为4294967295;也就是说,十六进制0xFFFFFF

现在。如果我做对了,我可以拥有一个最多包含4294967295个元素的数组(例如
int
),但是由于数组被
int
索引,而不是
uint
索引,我无法访问数据的“上半部分”

这让我很困惑,因为我似乎遗漏了一些重要的东西

我希望你能启发我

问候

编辑:

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

任何单个维度的最大索引为2147483591

请记住,数组可以有多个维度,因此可以有一个最多包含4294967295项的二维数组,但每个维度的最大长度可以为2147483591


因此,可以使用2147483591 X 2数组,但不能使用1000000 X 1000000数组。

我假设“最大元素数”更高,因为它允许使用多维数组<代码>新字节[4000000000]将不被允许,但
新字节[40001000000]
将被允许。但我一直认为,多维数组映射到一维数组?@lhiapgppaunk否-它们不是。@lhiapgppaunk它们存储在一个连续的内存块中。这不完全是同一回事。至少在C中是这样,不是吗?@lhiapgppaunk这是因为C没有真正的索引器,只是转换指针数学(这就是为什么会有大量缓冲区溢出安全漏洞),但在C中,如果没有
不安全的
代码,就无法做到这一点。在C语言中可以做很多不应该做的事情。。。