我想创建两个200M int元素数组。像那样:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Arr
{
class Program
{
static void Main(string[] args)
{
int Min = 0;
int Max = 10;
int ArrSize = 200000000;
int[] test2 = new int[ArrSize];
int[] test3 = new int[ArrSize];
Console.ReadKey();
}
}
}
但是,在VS2013下,我遇到了内存不足异常,其中黄色箭头指向int[] test3 = new int[ArrSize];
在线。机器有12GB的RAM。
如果我将元素数量减少到150M,则不会引发异常。
如果仅初始化一个大小为200M的数组,则不会引发异常。
为什么?
机器有12GB的RAM。
影响程序的速度(取决于可用空间的多少),但是物理内存大小对分配成功或失败没有影响。这取决于可用的地址空间。
如果您使用32位编译,特别是如果您不使用/LARGEADDRESSAWARE
option,那么您将只能分配少量大对象,因为它们必须容纳在单个2GB地址空间中,并且该空间已分解通过DLL和其他分配方式。
如果确实需要那么大的对象,则最好使用64位。对于32位程序,可以通过将对象分成较小的块来部分地解决此问题,从而增加找到足够大的地址空间自由区域的机会。
VS 2013中的C#控制台应用程序的默认设置为“ AnyCPU”,并带有“首选32位”。
您可以在项目属性->构建选项卡上更改此设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句