3 回答
TA贡献2080条经验 获得超4个赞
一个数组在理论上最多可以包含2,147,483,647个元素,因为它使用int进行索引。实际限制略低于此限制,具体取决于数组中包含的类型。
但是,.NET CLR中最大单个对象限制为2GB,即使在64位中也是如此。这是设计使然。
您可以轻松地实现一种IList<T>
在内部保留多个数组并允许您扩展到超过2GB单个对象限制的实现,但是框架本身没有一个。
但是,通常这不是一个真正的问题。大多数时候,您将拥有指向大型类的数组-因此该数组仅保存引用。这意味着您的阵列可以有效地指向许多GB的内存-但是阵列本身不能大于2GB。
请注意,从.NET 4.5开始,有一个可供64位应用程序加入的新选项:gcAllowVeryLargeObjects。有了这个新的选项集,就可以UInt32.MaxValue
在多维数组中获得(4,294,967,295)个元素,尽管一维数组仍限于2,146,435,071个元素(对于单字节数组或不包含任何字节的结构数组,则为2,147,483,591个元素) 。
使用此选项的新规则是:
数组中元素的最大数量为UInt32.MaxValue。
对于字节数组和单字节结构数组,任何单个维度的最大索引为2,147,483,591(0x7FFFFFC7),对于其他类型,最大索引为2,146,435,071(0X7FEFFFFF)。
字符串和其他非数组对象的最大大小不变。
TA贡献1818条经验 获得超7个赞
.NET中任何一个对象的最大大小为2GB。
当然,这对您可以制作原始阵列的大小设置了硬性限制。
您可以创建一个“数组数组”(甚至创建自己的索引器,就好像它是一个连续数组一样),如果您为其定义了自己的类,则可以将其设为任意大小。
- 3 回答
- 0 关注
- 717 浏览
添加回答
举报