gpt4 book ai didi

arrays - 为什么.net 中的数组索引受限于奇怪的数字 0x7FEFFFFF?

转载 作者:行者123 更新时间:2023-12-04 17:16:55 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is the max size of byte[] 2 GB - 57 B?

(3 个回答)



Resize capacity of List<T>

(2 个回答)


5 个月前关闭。




来自 MSDN

The array size is limited to a total of 4 billion elements, and to a maximum index of 0x7FEFFFFF in any given dimension (0x7FFFFFC7 for byte arrays and arrays of single-byte structures).


为什么这些数字,而不是其他?
我的意思是,它们不是偶数,不是 maxint 或类似的东西。 “切”片有什么用? (0x7F_E_FFFFF = 0x7FFFFFFF - 0x100000,或者,对于字节数组,0x7FFFFF_C7 = 0x7FFFFFF - 0x38)
--- 已编辑---
在相关问题( Why is the max size of byte[] 2 GB - 57 B? )中,他们谈论的是开销。但是 0x10000 开销看起来不像类型或索引信息,是吗?所以我不能接受“因为有运行时开销”的答案。这就像解释盐尝起来咸是因为它含有咸味物质。
我猜人们必须知道 .net 实现细节背后的推理才能真正解释这个数字?

最佳答案

出于好奇,我查看了System.Array的来源并发现了这个:
https://github.com/dotnet/corert/blob/master/src/System.Private.CoreLib/shared/System/Array.cs

// We impose limits on maximum array lenght in each dimension to allow efficient
// implementation of advanced range check elimination in future.
// Keep in sync with vm\gcscan.cpp and HashHelpers.MaxPrimeArrayLength.
// The constants are defined in this method: inline SIZE_T MaxArrayLength(SIZE_T componentSize) from gcscan
// We have different max sizes for arrays with elements of size 1 for backwards compatibility
internal const int MaxArrayLength = 0X7FEFFFFF;
internal const int MaxByteArrayLength = 0x7FFFFFC7;
那是 .NET 3.1 Core 版本。我不会怀疑其他版本是否相同。显然,目的是为了某种优化。也许有人可以为此答案添加更权威的理由或发布另一个。

关于arrays - 为什么.net 中的数组索引受限于奇怪的数字 0x7FEFFFFF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68513894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com