繁体   English   中英

获取 RAM 系统大小

[英]Get RAM system size

我想知道如何通过 C++(在 Windows 7 上)获取我的 RAM 大小。

"

使用GetPhysicallyInstalledSystemMemory检索计算机上物理安装的RAM量。

(请注意,这需要Windows Vista SP1或更高版本。此功能在早期版本的Windows操作系统上不可用。)

MSDN的评论说:

GetPhysicallyInstalledSystemMemory函数从计算机的SMBIOS固件表中检索物理安装的RAM量。 这可能与GlobalMemoryStatusEx函数报告的数量不同,后者将MEMORYSTATUSEX结构的ullTotalPhys成员设置为可供操作系统使用的物理内存量 操作系统可用的内存量可能小于计算机中物理安装的内存量,因为BIOS和某些驱动程序可能会将内存保留为内存映射设备的I / O区域,从而使操作系统无法访问内存和应用程序。

GetPhysicallyInstalledSystemMemory函数检索的物理内存量必须等于或大于GlobalMemoryStatusEx函数报告的量; 如果它更小,则SMBIOS数据格式错误,并且函数因ERROR_INVALID_DATA而失败。 格式错误的SMBIOS数据可能表示用户计算机出现问题。

这意味着,您还需要查看GlobalMemoryStatusEx

在Windows上:

typedef BOOL (WINAPI *PGMSE)(LPMEMORYSTATUSEX);
PGMSE pGMSE = (PGMSE) GetProcAddress( GetModuleHandle( TEXT( "kernel32.dll" ) ), TEXT( "GlobalMemoryStatusEx") );
if ( pGMSE != 0 )
{
    MEMORYSTATUSEX mi;
    memset( &mi, 0, sizeof(MEMORYSTATUSEX) );
    mi.dwLength = sizeof(MEMORYSTATUSEX);
    if ( pGMSE( &mi ) == TRUE )
        os << "RAM: " << mi.ullTotalPhys / 1048576 << "MB";
    else
        pGMSE = 0;
}
if ( pGMSE == 0 )
{
    MEMORYSTATUS mi;
    memset( &mi, 0, sizeof(MEMORYSTATUS) );
    mi.dwLength = sizeof(MEMORYSTATUS);
    GlobalMemoryStatus( &mi );
    os << "RAM: " << mi.dwTotalPhys / 1048576 << "MB";
}

在Linux上:

/proc/meminfo

好的,伙计们! 通过这样做[guru mode on],我找到了解决方案:

#define _WIN32_WINNT  0x0501 // I misunderstand that
#include <windows.h>
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
   MEMORYSTATUSEX statex;

   statex.dwLength = sizeof (statex); // I misunderstand that

   GlobalMemoryStatusEx (&statex);
   cout << "Physical RAM => " << (float)statex.ullTotalPhys/(1024*1024*1024)<< endl;

   system("PAUSE");
   return EXIT_SUCCESS;
}

我不得不定义_WIN32_WINNT 0x0501,但我不知道为什么[大师模式关闭]。

如果有人能够解释我在做什么,为什么没有它就无法解决问题。

还有一件事,那是什么:

statex.dwLength = sizeof (statex);

您想使用返回MEMORYSTATUSEXGlobalMemoryStatusEx 您想要的字段称为ullTotalPhys。

0x501是WindowsXP版本,即一些较旧的Windows版本不支持MEMORYSTATUSEX结构。 你的windef.h可能指向比0x5XX更低的WINVER

这应该有效:

#include <windows.h>

unsigned int get_ram(void)
{
    MEMORYSTATUSEX mem;
    mem.dwLength = sizeof(mem);
    GlobalMemoryStatusEx (&mem);

    return mem.ullTotalPhys >> 20;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM