大数组C#OutOfMemoryException

大数组C#OutOfMemoryException,c#,out-of-memory,C#,Out Of Memory,在我的C#编程练习中,我试图创建一个长, 长度为0x1FFFFFF(base10中为536870911),但我得到System.OutOfMEmoryException 对于构建,我以x64系统为目标,在Windows7 x64上运行VisualStudio2008,内存为8GB。 它应该有足够的内存用于阵列(它适用于JDK x64和CPP项目) 有什么想法吗 const long MAX = 0x1fffffff; // 536870911 in base10

在我的C#编程练习中,我试图创建一个长, 长度为0x1FFFFFF(base10中为536870911),但我得到System.OutOfMEmoryException

对于构建,我以x64系统为目标,在Windows7 x64上运行VisualStudio2008,内存为8GB。 它应该有足够的内存用于阵列(它适用于JDK x64和CPP项目)

有什么想法吗

        const long MAX = 0x1fffffff; // 536870911 in base10
        program.arr = new long[MAX];
        for (long i = 0; i < MAX; i++)
        {
            program.arr[i] = i;                
        }
const long MAX=0x1ffffffff;//base10中的536870911
program.arr=新长[MAX];
用于(长i=0;i
CLR不支持任何大于2GB的单个对象。您要求的是一个4294967288字节的数组,是支持的两倍多


您可以使用这么多内存,但不能在单个对象(如数组)中使用。

很难推荐任何有意义的替代方案,因为您没有说明要实现的目标,只是说明无法实现的目标

也就是说,如果你真的需要一个快速连续的视图到一个大于2GB的平面地址空间,你可以使用它


如果您指出了这一块内存中的内容,为什么地址空间本身必须是连续的(例如,您是否将指向它的指针传递给非托管代码),以及为什么它需要平面寻址,这将有所帮助。

创建数组的子集,然后填充数组

你的名字


masterarray[]仅供参考,它叫“C#”,不是“CSharp”。你不能把一个物体做成这么大。但是,即使你可以,你似乎也有一种误解,即RAM决定了你可以分配多少内存。它没有,几十年来也没有。RAM的数量限制了您访问该内存的速度。拥有大RAM是一种性能优化;内存分配实际上最好被认为是页面文件之外的分配。请记住,当您分配内存时,您分配的是虚拟内存,而不是硬件内存。