如何获取索引大于max_int的数组元素

3

假设我们有一个非常长的字符串,比max_int还要大。

string str="this should contain a long string";

如果我想访问 str[100000000000],应该怎么做?

当我尝试使用非 int 类型的索引时,会出现以下错误:

“string.this[int]”的最佳重载方法具有一些无效参数

4个回答

3
您无法这样做。我认为您无法拥有一个超过2^32字节的对象,因此您不会遇到这种情况。 根据这篇文章,最大的CLR对象大小是2GB,这证实了我的说法。

2
单个对象的最大大小在.NET 4.5之前为2GB,因此您永远无法拥有如此大的字符串,因此尝试使用这么大的索引没有任何意义。
在.NET 4.5中,您可以增加该限制。引用自MSDN
“默认情况下,在64位Windows操作系统上运行64位托管应用程序时,您最多只能创建2 GB的对象。但是,在.NET Framework 4.5中,您可以增加此限制。有关更多信息,请参见gcAllowVeryLargeObjects元素。”
然而,大多数容器仍然基于int进行接口定义,即使对于数组也是如此,这没有帮助...
“数组中的最大元素数为UInt32MaxValue。”
...它是4294967295,仍然小于您提出的100000000000。
你真的需要那么多连续的内存吗?为什么不将数据分成较小的块?

1
你需要实现一个支持大范围索引的自定义数组。
所有正常的 .Net 类型(如 String、Array、List)仅支持整数索引。这部分是由于最大连续分配大小的限制 - 因此,您的自定义类需要将数据分块以支持这些索引。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接