获取RAM系统大小

Get RAM system size

本文关键字:系统 RAM 获取      更新时间:2023-10-16

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

好了,伙计们!我找到了解决方案,通过这样做[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,但我不知道为什么[guru模式是关闭的]。

如果有人能告诉我它在做什么,为什么没有它就不能工作。

还有一件事,那是什么?

statex.dwLength = sizeof (statex);

使用GetPhysicallyInstalledSystemMemory来检索在计算机上物理安装的的内存数量。

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

MSDN上的注释说:

GetPhysicallyInstalledSystemMemory函数检索的数量物理安装的RAM从计算机的SMBIOS固件表。这可以与数量不同由GlobalMemoryStatusEx报告函数,该函数设置ullTotalPhysMEMORYSTATUSEX结构的成员到物理内存的数量是否适用于操作系统使用。可用内存量对操作系统的要求可以少一些而不是物理上的内存量安装在电脑上是因为BIOS和一些驱动程序可能会保留内存作为I/O区域内存映射设备,使内存不可用系统和应用。

物理内存量检索方法:GetPhysicallyInstalledSystemMemory函数必须等于或大于比所报告的数量多GlobalMemoryStatusEx函数;/blockquote>

这意味着,您还需要查看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

您想使用返回MEMORYSTATUSEX的GlobalMemoryStatusEx。您想要的字段名为ullTotalPhys。

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