Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows上任何单个进程可以寻址的最大内存量_C#_Windows_Memory - Fatal编程技术网

C# Windows上任何单个进程可以寻址的最大内存量

C# Windows上任何单个进程可以寻址的最大内存量,c#,windows,memory,C#,Windows,Memory,回答Windows上任何单个进程可以处理的最大内存量: 在32位版本的Windows上,单个进程可以映射 一次超过3GB的虚拟内存。在64位版本的 在Windows中,32位进程可以映射和寻址不超过4GB的 一次虚拟内存 对于64位进程,数量很难计算,因为 有许多重叠限制,可根据所有 各种因素。通常约为7TB 我的问题:如何验证诸如“3GB”、“4GB”等值 我们能写一个C代码来证明吗?有办法吗 谢谢。您可以在控制台应用程序中编写某种循环来测试这一点 也许创建一个正好为1MB的字符串,并通过串联

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

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

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

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

我们能写一个C代码来证明吗?有办法吗


谢谢。

您可以在控制台应用程序中编写某种循环来测试这一点

也许创建一个正好为1MB的字符串,并通过串联过程循环以增加其大小,直到得到一个。。。堆栈溢出错误

在每次迭代中,写下迭代的大小或次数

编辑

我要补充一点,因为字符串对于使用对象是不可变的(尽管从技术上讲是引用类型)

编辑两个

Trispid指出,对象中装箱的字符串仍然是不可变的


创建一个字节数组[1024]应该可以做到这一点。

Mark Russinovich发表了一篇关于windows内存资源的多部分系列文章,其中非常详细地介绍了这一点。你可以在这里找到它:

他讲述了限制的原因,以及测试。测试代码在某个地方的管道中浮动

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

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

64位进程:2 GB,除非设置为大地址空间感知,在这种情况下,它最多可以寻址8 TB,除非它托管在基于英特尔安腾的系统上,该系统的容量限制为7 TB

Microsoft在以下位置说明了各种限制(按口味和类型):

天真的方法(另请阅读:足够好的方法):开始分配内存,直到出现OutOfMemory异常。3 GB限制仅适用于为其配置的系统,仅适用于为其配置的进程,并且会影响内核性能。您通常只获得2 GB。我是否也需要调整虚拟内存的大小?我只是想减少您需要考虑的未知变量的数量。因此,您建议他们在侧面创建一个x MB的数组,然后创建一个x+1 MB的新数组,在其中复制第一个数组和另一个数组,并在循环中执行此操作?您最好创建一个预期大小的数组,如果可以的话,请删除该数组并创建一个新的数组。这将是更好的C++思想。对象也不工作,一个字符串,这是一个对象仍然是不可变的。你最好的办法是创建一个字节数组。他们可以做到这一点,但如果可能的话,我希望使用单个对象。我不知道一个对象定义占用多少内存。