Delphi2007:GlobalMemoryStatus获取总RAM

Delphi2007:GlobalMemoryStatus获取总RAM,delphi,delphi-2007,Delphi,Delphi 2007,我需要使用Delphi2007获得系统的总物理内存。在4GB或更大的系统上使用GlobalMemoryStatus似乎会给我带来错误。在Delphi2007中,GlobalMemoryStatusEx不存在,因此我手动将函数调用添加到程序中。它在我的Windows 7 x64上正确返回内存(8GB),但在Vista x32系统上仍然返回不正确的值(在该系统上应为4GB,但返回2.9GB)。 知道我做错了什么吗?GlobalMemoryStatusEx能否在较旧的操作系统上工作 类型 DWORDL

我需要使用Delphi2007获得系统的总物理内存。在4GB或更大的系统上使用GlobalMemoryStatus似乎会给我带来错误。在Delphi2007中,GlobalMemoryStatusEx不存在,因此我手动将函数调用添加到程序中。它在我的Windows 7 x64上正确返回内存(8GB),但在Vista x32系统上仍然返回不正确的值(在该系统上应为4GB,但返回2.9GB)。 知道我做错了什么吗?GlobalMemoryStatusEx能否在较旧的操作系统上工作

类型
DWORDLONG=UInt64;
PMemoryStatusEx=^TMemoryStatusEx;
TMemoryStatusEx=打包记录
dwLength:DWORD;
德沃德:德沃德;
乌尔多尔菲斯:德沃德隆;
ullavalphys:DWORDLONG;
ulltottalpagefile:DWORDLONG;
ullAvailPageFile:DWORDLONG;
ullTotalVirtual:DWORDLONG;
ullAvailVirtual:DWORDLONG;
ullavailxendedvirtual:DWORDLONG;
结束;
函数GlobalMemoryStatusEx(var lpBuffer:TMemoryStatusEx):BOOL;stdcall;外核32;
函数getmemorysize:word;
变量
内存:TMemoryStatusEx;
开始
FillChar(内存,SizeOf(内存),0);
memory.dwLength:=SizeOf(内存);
GlobalMemoryStatusEx(内存);
结果:=memory.ullTotalPhys div(1024*1024);
结束;

这是意料之中的,你没有做错任何事。Windows不会在32位操作系统上报告4GB ram。以下是MSDN中题为“3GB-not-4GB RAM问题”的一段话:

由于很久以前做出的架构决策,如果您有4GB的 安装了物理RAM后,Windows只能报告 RAM的物理4GB(范围从~2.75GB到3.5GB,具体取决于 安装的设备、主板芯片组和BIOS)


globamemorystaturex
应能在Windows 2000及更高版本上运行(更高版本的MSDN文档不包括Win2K,但早期的文档中有Win2K)

@SertacAkyuz这回答了我的Vista问题,但你知道上面的代码是否能在Windows XP等较旧的操作系统上运行吗?我只是有点担心,因为我不得不手动添加GlobalMemoryStatusEx的原型。谢谢。Ace-声明可能因为IDE的Win9x支持而丢失,不要担心@肯:好了,谢谢。