在 Windows Server 2003, Enterprise Edition, SP2 下(/3GB 开关未启用)
据我了解,我可能错了,一个进程的最大可寻址内存是 4GB。
那是 2GB 的私有字节和 2GB 的虚拟字节吗?
当达到私有字节限制或虚拟字节限制时,您是否会收到“内存不足”错误?
在 Windows Server 2003, Enterprise Edition, SP2 下(/3GB 开关未启用)
据我了解,我可能错了,一个进程的最大可寻址内存是 4GB。
那是 2GB 的私有字节和 2GB 的虚拟字节吗?
当达到私有字节限制或虚拟字节限制时,您是否会收到“内存不足”错误?
从某种意义上说,一个进程的最大地址空间是4GB是正确的。对于每个进程,操作系统占用了一半的地址空间。这可以通过 3GB 开关进行更改,但可能会导致系统不稳定。因此,我们剩下 2GB 的可寻址内存供进程自己使用。好吧,不完全是。事实证明,这个空间的一部分被其他东西占用了,例如 DLL 和其他公共代码。作为程序员,您可用的实际内存约为 1.5GB - 1.7GB。
我不确定您如何处理意外超出此限制的情况,但我知道由于这个原因在大型多人地图中崩溃的游戏。另一件需要注意的是,除非启用 /LARGEADDRESSAWARE:YES 链接器标志,否则 32 位程序在 64 位系统上不能使用超过 2GB 的地址空间。
Mark Russinovich 就此发表了一系列文章。 突破 Windows 的极限:物理内存
虽然 4GB 是 32 位客户端 SKU 的许可限制,但有效限制实际上更低,并且取决于系统的芯片组和连接的设备。原因是物理地址映射不仅包括 RAM,还包括设备内存,x86 和 x64 系统将所有设备内存映射到 4GB 地址边界以下,以保持与不知道如何处理的 32 位操作系统兼容地址大于 4GB。如果一个系统有 4GB RAM 和设备,如视频、音频和网络适配器,在其设备内存中实现窗口的总和为 500MB,则 4GB RAM 中的 500MB 将位于 4GB 地址边界之上。
在 32 位 Windows 平台上,您总共只能访问 2Gb 的内存(没有 3Gb 开关)。
您可以在 64 位操作系统上运行多个 32 位虚拟机,这样如果您的机器超过 4Gb,每个应用程序都可以访问尽可能多的内存。
很多人刚开始遇到这些障碍,我想如果你的应用程序是在 .net 或 Java 中会更容易,因为 VM 很高兴在 64 位操作系统上达到 32Gb 的内存。
在 32 位上,如果有足够的物理内存和磁盘空间用于虚拟内存,内存会用完大约 3GB,因为内核为自己保留了 0xC0000000 以上的地址空间。在运行 64 位应用程序的 64 位内核上,限制为 8TB。
有关更多详细信息,请查看MSDN - Windows 版本的内存限制
32 位机器的最大可寻址内存为 4GB,对于 64 位机器,您可以处理更多负载。(虽然有些32bit的机器有扩展系统可以访问更多,但我觉得这不值得打扰或考虑使用)。
当达到虚拟限制时,您会出现内存不足错误。在 Windows Server 2003 上,任务管理器会在标有“提交费用限制”的性能选项卡上告诉您限制。