在Windows Server 2003,Enterprise Edition,SP2(未启用/ 3GB开关)

据我所知,我可能错了,进程的最大可寻址内存为4GB。

是2GB的私有字节和2GB的虚拟字节吗?

你得到“内存不足”吗?达到专用字节限制或虚拟字节限制时出错?

有帮助吗?

解决方案

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

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

其他提示

以下链接比我更好地解释了它:

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

马克·鲁西诺维奇(Mark Russinovich)在此发表了一系列帖子 推动Windows的限制:物理内存

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

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

您可以在64位操作系统上运行多个32位虚拟机,以便在您的计算机超过4Gb时,每个应用程序都可以访问尽可能多的内存。

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

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

有关详细信息,请查看 MSDN - Windows版本的内存限制

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

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

scroll top