【发布时间】:2019-09-04 17:11:22
【问题描述】:
.Net 4.5 gcAllowVeryLargeObjects 被引入以允许 64 位系统的大小大于 2gb 的数组。然而,数组曾经(并且仍然)被限制在大约 42 亿个元素和大约 21 亿个维度中。为什么?
对它没有兴趣,还是存在阻止他们在 .Net 核心类(数组、列表等)中使用字长索引器的实际问题?
C# 已经允许在自定义类中使用长类型索引器,并且将索引器从 int 更改为 long 以用于 64 位构建将不会中断(我相信),因为 int 始终可以转换为 long。
【问题讨论】:
-
将类型更改为
long将是一项重大更改,因为long无法分配给int。 -
我认为如果你有这么大的对象,那么使用编译语言而不是 C# 在 SIMD 中工作可能会更好
-
@Lee 但如果索引器很长,则分配是从 int 到 long(非中断)。我当然可以理解,如果将来的代码是为 64 位编写的,那么如果编译为 32 位,它可能有一天会被破坏。问题变成了 C# 未来的预期架构和用途。
-
@phuclv C# 内置了 SIMD 操作,并支持将它们扩展到自定义算法。我在这里尝试完成的是记忆动态规划问题。
-
如果您有
int i = someArray.Length并将Length的类型更改为long,则此代码将中断。无论目标架构如何,ints 始终为 32 位,因此编译为 64 位架构不会有任何区别。有一个 [LongLength](docs.microsoft.com/en-us/dotnet/api/…) 属性返回一个long。
标签: c# arrays limit dimensions gcallowverylargeobjects