如何确定机器上的硬件(CPU和RAM)?
我正在研究跨平台性能分析套件,并希望将有关机器CPU(体系结构/时钟速度/内核)和RAM(总计)的信息添加到每次运行的报告中。 目前我需要针对Windows和Unix,所以我需要从两个平台获取这些信息的方法,任何线索?
编辑:感谢伟大的答案,现在我得到了CPU架构,CPU核心数量和总内存,但我仍然缺乏CPU的时钟速度任何想法的那个?
在Windows上,您可以使用GlobalMemoryStatusEx来获取实际RAM的数量。
处理器信息可以通过GetSystemInfo获取。
以下是在Windows计算机上获取所需信息的一种方法。 我从一个实际的项目中复制并粘贴了它,并做了一些小的修改,所以请随意清理它以便更有意义。
int CPUInfo[4] = {-1};
unsigned nExIds, i = 0;
char CPUBrandString[0x40];
// Get the information associated with each extended ID.
__cpuid(CPUInfo, 0x80000000);
nExIds = CPUInfo[0];
for (i=0x80000000; i<=nExIds; ++i)
{
__cpuid(CPUInfo, i);
// Interpret CPU brand string
if (i == 0x80000002)
memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo));
else if (i == 0x80000003)
memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
else if (i == 0x80000004)
memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
}
//string includes manufacturer, model and clockspeed
cout << "CPU Type: " << CPUBrandString << endl;
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
cout << "Number of Cores: " << sysInfo.dwNumberOfProcessors << endl;
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx(&statex);
cout << "Total System Memory: " << (statex.ullTotalPhys/1024)/1024 << "MB" << endl;
有关更多信息,请参阅GetSystemInfo,GlobalMemoryStatusEx和__cpuid。 虽然我没有包含它,但您也可以通过GetSystemInfo函数确定操作系统是32位还是64位。
CPU很容易。 使用cpuid
指令。 我会留下其他海报来找到一种便携的方式来确定一个系统有多少RAM。 :-)
对于特定于Linux的方法,您可以访问/proc/meminfo
(和/proc/cpuinfo
,如果您不想分析cpuid
响应)。
上一篇: How to determine the hardware (CPU and RAM) on a machine?
下一篇: How do I monitor the computer's CPU, memory, and disk usage in Java?