如何在32位计算机上识别超过4GB的内存?

4
我知道32位操作系统无法看到超过4GB的RAM。
因此,如果我在运行32位操作系统的计算机上安装了6GB的RAM,有没有办法识别它?
我知道一个获取已安装RAM的方法是通过WMI类:win32_physicalmemory.Capacity
但我不知道它是否会显示正确的已安装RAM大小而不是支持的RAM大小。
我没有设置来测试这种情况,但如果有人已经知道,请确认一下。
否则,请告诉我是否有其他相同的方法。我在询问任何32位Windows操作系统。

提前感谢。
Samrat Patil。


3
“我知道32位操作系统无法看到超过4GB的内存。”这是不正确的。通过处理器支持的物理地址扩展(PAE)功能和像地址窗口扩展(AWE)这样的软件技术,你可以访问超过4GB的内存(例如WinServer2003 Enterprise可以使用它)。关键是,在单个时间点,单个进程只能访问4GB的地址空间。 - Mehrdad Afshari
1
它会让许多驱动程序崩溃并且死得很惨 ;) - jalf
@jalf,这有时似乎是驱动程序的默认行为。 ;) - sisve
3个回答

4

带有启用了PAE的CPU的32位操作系统可以看到超过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

有一个非常好的函数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。所有的值都是以字节为单位。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接