Jef*_*Cyr 16 .net memory-management process
我认为64位进程的最大用户空间是8TB,但我做了一点测试,我可以得到的最大值是10-11GB.
注意:我在一个过程中不需要那么多内存,我只是想了解为什么出于好奇.
这是我的测试程序:
static void Main(string[] args)
{
List<byte[]> list = new List<byte[]>();
while (true)
{
Console.WriteLine("Press any key to allocate 1 more GB");
Console.ReadKey(true);
list.Add(new byte[1024 * 1024 * 1024]);
Console.WriteLine("Memory size:");
double memoryUsage = Process.GetCurrentProcess().PeakVirtualMemorySize64 / (double)(1024 * 1024 * 1024);
Console.WriteLine(memoryUsage.ToString("0.00") + " GB");
Console.WriteLine();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
将测试程序更新为更具确定性.
要接受答案,我想知道如果8TB仅是理论上,如何计算实际最大分配内存.
这是你的机器.
我有一个带有8GB RAM和12GB页面文件的x64,我运行你的程序,它最高为16.23GB.
EPILOG:然后我的Win7安装逐渐陷入昏迷状态,因为关键过程显然是内存匮乏.
编辑:如果你想了解Windows如何分配(即保留和提交)内存,请阅读:http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx和这:http:/ /blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx
由于.Net依赖于Windows来管理它用于构建GC堆的内存,因此Windows执行此操作的机制反映在内存在.Net中的低级别分配方式.