如何在32位机器上识别超过4 GB的ram

时间:2009-10-29 11:04:02

标签: c++ winapi memory

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

提前致谢。
Samrat Patil。

3 个答案:

答案 0 :(得分:4)

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

在Windows上,您可以使用GetPhysicallyInstalledSystemMemory功能:

  

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

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

答案 1 :(得分:1)

WMI将所有内存大小报告为uint64,如documentation for Win32_OperatingSystem所示。

答案 2 :(得分:1)

有很好的功能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。所有值都以字节为单位。