使用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";
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
我不得不定义_WIN32_WINNT 0x0501,但我不知道为什么[大师模式关闭].
如果有人能够解释我在做什么,为什么没有它就无法解决问题.
还有一件事,那是什么:
statex.dwLength = sizeof (statex);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19005 次 |
| 最近记录: |