当前位置:C++技术网 > 资讯 > 分分钟写出检测CPU信息的程序(处理器个数和处理器架构等)

分分钟写出检测CPU信息的程序(处理器个数和处理器架构等)

更新时间:2016-03-14 23:25:23浏览次数:1+次

    如果你想了解你的电脑的CPU的情况,你可以下载一个检测软件来检测。当然,如果你找不到合适的检测CPU信息的软件,可以自己制作一个哦。

    下面是我写的代码检测到我笔记本的CPU的情况:

联想y50c的CPU信息

【联想y50c笔记本的CPU信息】
    我们需要用到的函数为GetSystemInfo或GetNativeSystemInfo,涉及到的结构体为SYSTEM_INFO。了解这两个东西,我们就可以自己写一个检测CPU的程序哦。是不是有点小激动呢?下面来说说吧。
    先来说说函数GetSystemInfo。这个函数的作用是获取当前系统的信息,不过经过测试,对于处理器架构的检测不准确。所以就有了GetNativeSystemInfo函数,GetNativeSystemInfo函数检测的更加准确。我的CPU是x64的,GetSystemInfo函数检测出来是x86的,GetNativeSystemInfo函数检测到的就是x64.
    其他的信息检测,一般都是准确的。而且,GetSystemInfo和GetNativeSystemInfo的使用都是一样的。他们的参数都是一个SYSTEM_INFO结构体变量地址。

    SYSTEM_INFO结构体的声明如下:
typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    struct {
      WORD wProcessorArchitecture;//处理器架构
      WORD wReserved;
    } ;
  } ;
  DWORD     dwPageSize;//物理内存页大小
  LPVOID    lpMinimumApplicationAddress;//应用程序可访问的最小物理内存
  LPVOID    lpMaximumApplicationAddress;//应用程序可访问的最大物理内存
  DWORD_PTR dwActiveProcessorMask;//活动的处理器掩码
  DWORD     dwNumberOfProcessors;//物理的处理器个数
  DWORD     dwProcessorType;//处理器类型系列
  DWORD     dwAllocationGranularity;//内存分配粒度
  WORD      wProcessorLevel;//处理器级别
  WORD      wProcessorRevision;//处理器的修订版本号
} SYSTEM_INFO;

    结构体各个成员的基本意义都标注了。应用程序可以访问的物理内存地址范围是有限的,从这个结构体中可以看出来。其他的部分供其他地方使用,比如保留给硬件使用等。
    活动处理器掩码则是确定当前哪些处理器在运行着。其他的信息就不在这里多解释了,要了解更多,看《Windows核心编程
下面是完整的代码:
#include <iostream>
#include <Windows.h>
using namespace std;
void main()
{
    SYSTEM_INFO si;
    GetNativeSystemInfo(&si);
    //GetSystemInfo(&si);
    cout<<"处理器架构:";
    switch(si.wProcessorArchitecture)
    {
    case PROCESSOR_ARCHITECTURE_AMD64:
        cout<<"x64架构 (AMD 或 Intel)";
        break;
    case PROCESSOR_ARCHITECTURE_IA64:
        cout<<"因特尔安腾处理器家族系列(IPF)";
        break;
    case PROCESSOR_ARCHITECTURE_INTEL:
        cout<<"x86架构";
        break;
    case PROCESSOR_ARCHITECTURE_UNKNOWN:
        cout<<"未知处理器架构";
        break;
    }
    cout<<endl;
    cout<<"页大小:"<<si.dwPageSize/1024<<"KB\n";
    cout<<"程序可使用物理内存最小地址:0x"<<hex<<si.lpMinimumApplicationAddress<<endl;
    cout<<"程序可使用物理内存最大地址:0x"<<hex<<si.lpMaximumApplicationAddress<<endl;
    cout<<"处理器掩码:0x"<<hex<<si.dwActiveProcessorMask<<endl;
    cout<<"处理器个数(物理):"<<si.dwNumberOfProcessors<<endl;
    cout<<"处理器系列:";
    switch(si.dwProcessorType)
    {
    case PROCESSOR_INTEL_386:
        cout<<"386"<<endl;
        break;
    case PROCESSOR_INTEL_486:
        cout<<"486"<<endl;
        break;
    case PROCESSOR_INTEL_PENTIUM:
        cout<<"586奔腾"<<endl;
        break;
    case PROCESSOR_INTEL_IA64:
        cout<<"2200IA64"<<endl;
        break;
    case PROCESSOR_AMD_X8664:
        cout<<"8664"<<endl;
        break;
    }
    cout<<"分配粒度:"<<si.dwAllocationGranularity/1024<<"KB"<<endl;
}