获取RAM系统大小
Get RAM system size
我想知道如何通过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
。
- C++,系统无法执行指定的程序
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 在UNIX系统中使用DIR查找文件的字节大小
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在C++游戏中与库存系统作斗争
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 如何制作无限制照明系统
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- C++系统找不到指定的文件错误
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- libstdc++ 文件系统中未初始化的用法?
- 有没有办法测量应用程序/程序占用多少系统资源(例如 RAM)
- 使用opengl绘制和映射纹理到系统RAM
- 获取RAM系统大小