数组中元素的确切最大限制是多少
这是一个纯粹的理论问题,所以请不要在你的答案中警告我。
如果我没有弄错,并且因为.NET中的每个数组都由Int32
索引,这意味着索引的范围从0
到Int32.MaxValue
。
假设不涉及内存/ GC约束 ,.NET中的数组最多可包含2147483648
(而不是2147483647
)个元素。 对?
那么, 理论上这是真的。 实际上,理论上可以支持更大的数组 – 请参阅此Array.CreateInstance
签名,该签名需要long
值的long
值。 您将无法使用C#索引器索引此类数组,但您可以使用GetValue(long)
。
但是, 实际上 ,我不认为任何实现支持如此庞大的数组。 CLR的每个对象限制略低于2GB,因此即使是字节数组也不能实际具有2147483648个元素。 一些实验表明,在我的盒子上,你可以创建的最大数组是new byte[2147483591]
。 (这是在64位.NET CLR上; Mono的版本已经安装了choke。)
编辑:只是查看CLI规范,它指定数组具有Int32的下限和上限。 这意味着Int32.MaxValue
被禁止,即使它们可以用Array.CreateInstance
调用表示。 但是,它也意味着允许一个带有边界Int32.MinValue...Int.MaxValue
的数组是Int32.MinValue...Int.MaxValue
,即总共4294967296个元素。
编辑:再看一下,ECMA 335 partition III section 4.20( newarr
)指定初始化带newarr
的向量类型必须采用native int
或int32
值。 所以看起来虽然CLI术语中通常更宽松的“数组”类型必须具有int32
边界,但“向量”类型却没有。
- 在T-SQL中处理来自CLR存储过程的多个结果
- DependencyObject.InvalidateProperty无法正常工作
- 如何更改异步方法调用以防止强制异步调用堆栈
- C#Generic List转换为实现List 的类
- WPF和MVVM Light – 通过Messenger关闭特定的子窗口
- 如何插入BLOB数据类型
- 无法将值NULL插入“Discriminator”AspNetUsers表列中
- 重复库用于.Net的日期计算
- C#中的Google AnalyticsAPI – 请求执行失败:https://www.google.com/analytics/feeds/accounts/default