Windows上任何单个进程可以处理的最大内存量

时间:2012-08-09 20:39:40

标签: c# windows memory

Memory Limits for Windows Releases回答Windows上任何单个进程可以解决的最大内存量:

  

在32位版本的Windows上,单个进程可以映射并解决否   超过3GB的虚拟内存。在64位版本中   Windows,一个32位进程可以映射和地址不超过4GB   一次虚拟内存。

     

对于64位进程,数量很难计算   有许多重叠的限制可以适用于所有   各种因素。通常大约7TB。

我的问题:如何验证“3GB”,“4GB”等值?

我们可以编写一个C#代码来证明吗?有没有办法呢?

感谢。

2 个答案:

答案 0 :(得分:30)

Mark Russinovich发布了关于Windows内存资源的多部分系列,真的很好地涵盖了这一点。你可以在这里找到它: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

他介绍了为什么限制是它们的原因,以及测试。测试的代码在某个地方的管中浮动。

如果您想了解内存资源以及从泄漏各种类型中可以看到的问题,那么这是一个很好的阅读。

但是,简而言之,32位操作系统上的32位:2 GB,除非设置为大地址空间感知,在这种情况下为3 GB。 64位操作系统上的32位:2 GB,除非设置为大地址空间感知,在这种情况下为4 GB。

64位进程:2 GB,除非设置为大地址空间感知,在这种情况下它可以解决高达8 TB,除非它托管在基于Intel Itanium的系统上,限制为7 TB。

Microsoft在以下位置说明了各种限制(按口味和类型): http://msdn.microsoft.com/en-us/library/aa366778.aspx

答案 1 :(得分:1)

你可以在控制台应用程序中编写某种循环来测试它。

也许创建一个正好为1MB的字符串并循环连接过程以增加它的大小,直到得到... Stack Overflow错误。

在每次迭代时WriteLine的大小或迭代次数。

修改

我想补充一下,因为STRING是不可变的(尽管技术上是一个引用类型)才能使用OBJECT

编辑两个

Trisped指出Object中的一个字符串仍然是不可变的。

创建字节数组[1024]应该可以解决问题。