为什么使用int.MaxValue的数组的分配失败并且分配两个大小为int.MaxValue / 2的数组不会?

时间:2012-06-03 03:03:28

标签: c#

为什么分配大小为int.MaxValue的字节数组失败

    byte[] array1 = new byte[int.MaxValue]; // throws an OutOfMemoryException 

并且分配了两个大小为int.MaxValue / 2的数组?

    byte[] array2 = new byte[int.MaxValue / 2];
    byte[] array3 = new byte[int.MaxValue / 2];

3 个答案:

答案 0 :(得分:4)

.NET中对象的最大大小为2GB:http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx

int.MaxValue +数组开销略大于2 GB。

答案 1 :(得分:0)

我不知道c#中int.MaxValue的值,但我认为.Net不允许大于2GB的对象

答案 2 :(得分:0)

在.NET的最新版本(至少4.5以上)中,您可以分配大于2Gb的对象 - 但是您必须设置gcAllowVeryLargeObjects - https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx