如何确定机器上的硬件(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响应)。

链接地址: http://www.djcxy.com/p/79819.html

上一篇: 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?