获取RAM系统大小

问题描述 投票:0回答:5

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

c++ windows windows-7 ram
5个回答
11
投票

使用

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

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

MSDN 上的评论说:

获取物理安装的系统内存 函数检索金额 物理安装的 RAM 计算机的 SMBIOS 固件表。 这可能与金额不同 由 GlobalMemoryStatusEx 报告 函数,设置 ullTotalPhys MEMORYSTATUSEX 结构的成员 到物理内存量 适用于操作系统 使用。可用内存量 到操作系统可以少 比物理内存量 安装在计算机中是因为 BIOS和一些驱动程序可能会保留 内存作为 I/O 区域 内存映射设备,使得 内存无法用于操作 系统和应用程序。

物理内存量 检索到的 获取物理安装的系统内存 函数必须等于或大于 比报告的金额 GlobalMemoryStatusEx 函数; 如果是 较少,SMBIOS 数据格式错误 并且该功能失败 错误_无效_数据。 SMBIOS 格式错误 数据可能表明存在问题 用户的计算机。

这意味着,您还想看看

GlobalMemoryStatusEx


7
投票

好吧,伙计们!我通过这样做找到了解决方案[开启大师模式]:

#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);

5
投票

在 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


4
投票

您想要使用返回

GlobalMemoryStatusEx
MEMORYSTATUSEX
。您想要的字段称为
ullTotalPhys


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.