如何获得安装内存大小?

时间:2012-01-02 14:03:33

标签: c windows

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

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位PC下显示3240 Mb,在64位PC下显示3976 MB RAM,但两台PC都安装了4.0 GB RAM。有没有办法以某种方式获得已安装内存的正确大小?

谢谢!

4 个答案:

答案 0 :(得分:3)

此代码可能有效,

#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

更新

  

此代码存在的问题是,在32位PC下显示3240 Mb,在64位PC下显示3976 MB RAM,但两台PC都安装了4.0 GB RAM。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我知道,WMI查询在C下有点复杂,但不幸的是有一些东西,你只能从那里查询。在我的应用程序中,我现在正在制作,我已经使用了wmi querys,所以这对我来说不是问题。

感谢大家的帮助!

kampi

答案 3 :(得分:-1)

ANSI / ISO C和POSIX都不允许您查询已安装的主内存的大小,理由是您的程序逻辑依赖于已安装的RAM量是没有意义的。然而,以下两个通用的解决方法相当不错,特别是在组合时:

  • 根据需要进行分配,如果没有足够的可用内存则抱怨
  • 发送您的代码/程序,并附上一条通知:“要求:至少MB主内存”