.NET Max Memory即使对于x64程序集也使用2GB

时间:2009-06-11 16:09:42

标签: c# .net memory memory-management

我已阅读(http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx).NET中对象的最大大小为2 GB。

我是否正确假设如果我有一个占用256 MB内存的对象,因为它是一个引用类型,我可以拥有这些256 MB对象的数组,其中所有对象可能会占用> 2GB内存为只要参考数组的大小保持在2 GB以下?

2 个答案:

答案 0 :(得分:10)

是的,你的假设是正确的。

2GB限制分别适用于每个对象。用于所有对象的总内存可能超过2GB。

(运行时是否能够为您的需求分配足够的内存是另一回事。我怀疑它是否可以在32位机器上找到完整的2GB备用内存,但它在64位上应该不是问题。)< / p>

答案 1 :(得分:6)

“在.NET 4及更早版本中,即使在64位进程中,任何对象的大小也不能超过2GB。但是,对于使用大型数组的某些工作负载,此大小限制可能会受到限制。因此,.NET 4.5支持在64位进程中提升数组的限制,这样数组可能大于2GB。这意味着,例如,你可以分配一个Int32.MaxValue Int32s数组,即使这样的数组将消耗8GB。 .NET中的对象分配在一个特殊的堆上,并不是巧妙地称为大对象堆(LOH); .NET 4.5也看到了对LOH的显着性能改进,包括使用更好的算法来管理堆中的空闲内存。

http://msdn.microsoft.com/en-us/library/hh285054(v=VS.110).aspx

http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx