Windows进程何时耗尽内存?

在Windows Server 2003企业版SP2下(未启用/ 3GB交换机)

据我了解,我可能是错的,一个进程的最大可寻址内存是4GB。

那是2GB的专用字节和2GB的虚拟字节?

当达到专用字节限制或虚拟字节限制时,会出现“内存不足”错误吗?

2

6 答案

从某种意义上说,一个进程的最大地址空间是4GB是正确的。对于每个进程,地址空间的一半由操作系统占用。这可以通过3GB开关进行更改,但可能会导致系统不稳定。因此,我们剩下2GB的可寻址内存供过程自行使用。那么,不完全。事实证明,这个空间的一部分被其他东西占用,如DLL和其他通用代码。作为编程人员可用的实际内存大约为1.5GB - 1.7GB。

我不确定你如何处理意外超过这个限制,但我知道这个游戏在大型多人地图中崩溃。另外需要注意的是,除非使用/ LARGEADDRESSAWARE:YES链接器标志,否则32位程序不能在64位系统上使用超过2GB的地址空间。

4
额外

32位机器的最大可寻址内存为4GB,对于64位机器,您可以处理更多的负载。 (虽然一些32位机器有扩展系统可以访问更多,但我认为这不值得打扰或考虑使用)。

达到虚拟限制时,会出现内存不足错误。在Windows Server 2003上,任务管理器会告诉您标签为“提交费用限额”的性能选项卡上的限制。

0
额外

下面的链接比我所能解释的要好得多:

MSDN - CLR Inside Out:调查内存问题

0
额外

在32位上,如果虚拟内存有足够的物理内存和磁盘空间,内核会为自己预留大于0xC0000000的地址空间,因此内存耗尽大约3GB。在运行64位应用程序的64位内核上,限制为8TB。

For more details, check out MSDN - Memory Limits for Windows Releases

0
额外

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

虽然4GB是32位客户端SKU的许可限制,但有效限制实际上较低,并取决于系统的芯片组和连接设备。原因是物理地址映射不仅包含RAM,还包含设备内存,x86和x64系统将所有设备内存映射到4GB地址边界以下,以便与不知道如何处理的32位操作系统兼容地址大于4GB。如果一个系统有4GB内存和设备,比如视频,音频和网络适配器,这些设备的内存总和为500MB,那么500MB的4GB内存将位于4GB的地址边界之上。

0
额外

在32位Windows平台上,您只能访问总共2Gb的内存(没有3Gb交换机)。

您可以在64位操作系统上运行多个32位虚拟机,以便每台应用程序可以访问尽可能多的内存,只要您的机器拥有超过4Gb的内存。

很多人刚刚开始遇到这些障碍,如果你的应用程序使用.net或Java,那么我认为它更容易,因为虚拟机在64位操作系统上高达32Gb的内存。

0
额外