如何获得安装的内存大小?

我想查询安装的内存的大小。 我用上面的代码:

void GetInstalledMemory( char * MemorySize ) { memset( MemorySize, 0, sizeof( MemorySize ) ); MEMORYSTATUSEX statex; statex.dwLength = sizeof( statex ); if ( !GlobalMemoryStatusEx( &statex ) ) strcpy( MemorySize, "N/A" ); else sprintf( MemorySize, "%I64d", statex.ullTotalPhys / 1024 / 1024 ); }//GetInstalledMemory 

这个代码的问题是,在一个32位的个人电脑显示3240 Mb,并在一个64位的个人电脑显示3976 MB RAM,但是这两个个人电脑有4.0 GB的RAM安装。 有没有办法得到安装的内存正确的大小?

谢谢!

这个代码可能工作,

 #include <windows.h> #include <stdio.h> int main() { MEMORYSTATUSEX m; m.dwLength = sizeof (m); GlobalMemoryStatusEx (&m); printf("Installed Memory size = %I64d KB\n", m.ullTotalPhys/1024); return 0; } 

但硬件访问功能不在标准C中 。 所以他们不会是便携式的。

MSDN

UPDATE

这个代码的问题是,在一个32位的个人电脑显示3240 Mb,并在一个64位的个人电脑显示3976 MB RAM,但是这两个个人电脑有4.0 GB的RAM安装。

这是因为32位机器不能处理超过3Gb的内存。

您将不得不使用DMI接口,并且仅限于支持它的系统。 许多版本的Windows(包括没有服务包的XP和Vista)都不知道有多少物理内存。

让我回答我自己的问题。 所以,实际上没有办法获得安装的内存的正确大小,因为内存大小窗口数量的窗口不会计算出显卡的内存大小。 所以,如果您安装了4 GB RAM,并且您有一个512 MB的视频卡,并且您想要查询安装的内存的大小,那么您将得到结果,您有〜3488MB RAM。 但是,从WMI您可以查询正确的大小。 在Win32_PhysicalMemory获得容量值,你将有正确的价值。

我知道,在C语言下,WMI查询是一个复杂的问题,但不幸的是有一些事情,只能从那里查询。 在我的应用程序,我现在正在做,我已经使用wmi查询,所以这对我来说不是一个问题。

感谢大家的帮助!

kampi

ANSI / ISO C和POSIX都不允许你查询安装的主内存的大小,理由是你的程序逻辑根据安装的RAM数量是没有意义的。 下面的两个通用变通办法相当不错,特别是在合并时:

  • 如果没有足够的可用内存,则尽可能多地分配和投诉
  • 运送你的代码/程序的通知是:“要求:至少MB的主内存”