Windows 版本的内存限制回答了 Windows 上任何单个进程可以处理的最大内存量:
在 32 位版本的 Windows 上,单个进程一次可以映射和寻址不超过 3GB 的虚拟内存。在 64 位版本的 Windows 中,32 位进程一次可以映射和寻址不超过 4GB 的虚拟内存。
对于 64 位进程,该数量很难计算,因为根据各种因素可能会应用许多重叠限制。它通常在 7TB 左右。
我的问题:如何验证“3GB”、“4GB”等值?
可以写一个C#程序来证明吗?有办法吗?
Windows 版本的内存限制回答了 Windows 上任何单个进程可以处理的最大内存量:
在 32 位版本的 Windows 上,单个进程一次可以映射和寻址不超过 3GB 的虚拟内存。在 64 位版本的 Windows 中,32 位进程一次可以映射和寻址不超过 4GB 的虚拟内存。
对于 64 位进程,该数量很难计算,因为根据各种因素可能会应用许多重叠限制。它通常在 7TB 左右。
我的问题:如何验证“3GB”、“4GB”等值?
可以写一个C#程序来证明吗?有办法吗?
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,除非它托管在限制为 7 TB 的基于 Intel Itanium 的系统上。
微软在以下网址说明了各种限制(按风格和类型):http: //msdn.microsoft.com/en-us/library/aa366778.aspx
您可以在控制台应用程序中编写某种循环来测试它。
也许创建一个正好为 1MB 的字符串并循环连接过程以增加它的大小,直到你得到一个......堆栈溢出错误。
在每次迭代中,WriteLine 的大小或迭代次数。
编辑
我要补充一点,因为 STRING 是不可变的(尽管在技术上是一个引用类型)来使用 OBJECT
编辑二
Trisped 指出,装在 Object 中的字符串仍然是不可变的。
创建一个字节数组 [1024] 应该可以解决问题。