繁体   English   中英

数组大小大于 Int32.MaxValue 时的 .Length 行为与 LongLength

[英].Length behavior vs .LongLength when array size is larger than Int32.MaxValue

我正在寻找一些关于数组的 .Length 和 .LongLength 属性之间差异的文档。

具体来说,如果数组的长度大于Int32.MaxValue,will.Length会抛出异常,返回Int32.MaxValue,变为负值,返回0?

(清除“可能重复”的问题:我不是在询问数组的最大长度,或者 .NET CLR 对象的最大大小。假设一个 64 位系统和一个支持大对象的 CLR 版本)

不可能创建具有超过 2,147,483,591 个元素的一维数组(为了比较, int.MaxValue是 2,147,483,647)。 如果尝试创建包含更多元素的数组,则会抛出OutOfMemoryException 这意味着LongLength属性仍然没有用,您可以改用Length属性

我已经使用 .NET 4.5 在 x64 平台上对其进行了测试。 为了创建包含 2,147,483,591 个元素的数组,我修改了配置文件并添加了:

<configuration>
    <runtime>
        <gcAllowVeryLargeObjects enabled="true" />
    </runtime>
</configuration> 

基本上,我使用此MSDN 页面来启用总大小大于 2 (GB) 的数组。 数组的真正限制:

对于字节数组和单字节结构数组,任一维度的最大索引为 2,147,483,591(0x7FFFFFC7),对于其他类型为 2,146,435,071(0X7FEFFFFF)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM