我听说在.Net中 Array
的大小有一个硬性限制。据说无论是int[]
、double[]
还是你自己的数组对象,任何单个实例可以分配的最大内存量为2GB,即使你使用的是64位机器,这个2GB的限制仍然存在。
我不确定我的印象是否正确,有人能确认吗?
我听说在.Net中 Array
的大小有一个硬性限制。据说无论是int[]
、double[]
还是你自己的数组对象,任何单个实例可以分配的最大内存量为2GB,即使你使用的是64位机器,这个2GB的限制仍然存在。
我不确定我的印象是否正确,有人能确认吗?
在.NET 4.5版本之前,最大对象大小为2GB。从4.5版本开始,如果启用了gcAllowVeryLargeObjects,则可以分配更大的对象。请注意,string
的限制不受影响,但是“arrays”应该也包括“lists”,因为lists是由arrays支持的。
是的。单个对象的大小不能超过2GB。
与32位Windows操作系统一样,在64位Windows操作系统上运行64位托管应用程序时,可以创建的对象大小也受到2GB的限制。
这个问题有更多细节和一些有用的链接:CLR 4.0中单个对象的大小仍然受到2GB限制吗?
我本以为限制可能在索引上。我认为所使用的索引必须是整数,因此除非它们有某种方法绕过这一点,否则任何大于整数的东西都行不通。这将是4294967296个元素。不确定这是否甚至半真半假。我想知道答案。
编辑: 正如tomtom指出的那样,除非他们使用了一个无符号整数,否则整数通常是带符号的。所以4294967296的一半大约是2147483648。
0x7FFFFFC7
。0x3FFFFFDF
。即:
- 它使用 int 作为索引,其最大值为 2,147,483,647(2GB)
- 这是设计上的考虑。