为什么具有 int.MaxValue 的数组分配失败,而大小为 int.MaxValue / 2 的两个数组的分配没有?

ano*_*ari 3 c#

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

    byte[] array1 = new byte[int.MaxValue]; // throws an OutOfMemoryException 
Run Code Online (Sandbox Code Playgroud)

并且分配两个数组的大小不一 int.MaxValue / 2样?

    byte[] array2 = new byte[int.MaxValue / 2];
    byte[] array3 = new byte[int.MaxValue / 2];
Run Code Online (Sandbox Code Playgroud)

Ray*_*yat 5

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

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

  • 一个数组除了它的主要数据存储之外还包含一些额外的信息(一些来自“对象”,一些特定于数组),这就是为什么你早一点到达边界的原因。 (2认同)