【问题标题】:How to identify more than 4 gb ram on 32-bit machine如何在 32 位机器上识别超过 4 GB 的内存
【发布时间】:2009-10-29 11:04:01
【问题描述】:

我知道 32 位操作系统不能看到超过 4 GB 的 RAM。
因此,如果我要在运行 32 位操作系统的机器上安装 6 GB 的 RAM,有什么方法可以识别它吗?
我知道获取已安装 RAM 的一种方法是通过 WMI 类:win32_physicalmemory.Capacity
但我不知道它是否会显示正确安装的内存大小而不是支持。
我没有设置来测试这种情况,但如果有人已经知道这一点,请确认。
否则,请让我知道是否有其他方法可以做到这一点。我要求任何 Windows 32 位操作系统。

提前致谢。
萨姆拉特·帕蒂尔。

【问题讨论】:

  • “我知道 32 位操作系统不能看到超过 4 GB 的 RAM。”不对。借助处理器支持的物理地址扩展 (PAE) 功能和地址窗口扩展 (AWE) 等软件技术,您可以访问超过 4GB 的内存(例如 WinServer2003 Enterprise 可以使用它)。问题是,在单个时间点,单个进程可以访问 4GB 的地址空间。
  • 它让许多司机摔倒并惨死;)
  • @jalf,这有时似乎是驱动程序的默认行为。 ;)

标签: c++ winapi memory


【解决方案1】:

32 位操作系统在启用PAE 的 CPU 上可以看到超过 4GB 的内存。只是32位地址空间被限制为4GB。但由于应用程序只能访问它自己的虚拟地址空间,它无法判断它分配的某些内存是位于第 1 GB 还是第 5 GB 内存中。

在windows上,你可以使用GetPhysicallyInstalledSystemMemory函数:

函数从计算机的 SMBIOS 固件表中检索物理安装的 RAM 量。这可能与 GlobalMemoryStatusEx 函数报告的数量不同,后者将 MEMORYSTATUSEX 结构的 ullTotalPhys 成员设置为可供操作系统使用的物理内存量。

阅读更多: http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

【讨论】:

    【解决方案2】:

    WMI 将所有内存大小报告为 uint64,这可以在 documentation for Win32_OperatingSystem 中看到。

    【讨论】:

      【解决方案3】:

      有一个很好的函数GlobalMemoryStatusEx 应该可以解决你的问题。它会回馈

      typedef struct _MEMORYSTATUSEX {
        DWORD     dwLength;
        DWORD     dwMemoryLoad;
        DWORDLONG ullTotalPhys;
        DWORDLONG ullAvailPhys;
        DWORDLONG ullTotalPageFile;
        DWORDLONG ullAvailPageFile;
        DWORDLONG ullTotalVirtual;
        DWORDLONG ullAvailVirtual;
        DWORDLONG ullAvailExtendedVirtual;
      }MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
      

      我认为您正在寻找ullTotalPhys。所有值都以字节为单位。

      【讨论】:

        猜你喜欢
        • 2011-12-26
        • 2012-04-04
        • 1970-01-01
        • 2020-01-11
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多