CPU信息

原理

利用 __cpuid 的调用,获取CPU的信息,但是因为获取的信息存储在16个字节的内存区,需要自己去解析,所以可以预先定义对应的结构体来实现,主要利用结构体的一个特性.

代码

cpu_def.h
#ifndef __CPU_DEF_H__
#define __CPU_DEF_H__
#include "cpu_def.h"
typedef struct tagCpu0
{int		nMaximum;int		nIdStr1;int		nIdStr2;int		nIdStr3;
}CPU_0, *PCPU_0;typedef struct tagCpu1
{unsigned int	nStepId:4;						// 单步执行 IDunsigned int	nModel:4;						// 模型unsigned int	nFamily:4;						// Familyunsigned int	nProcessortype:2;				// 处理器类型 (Intel)unsigned int	nReserved1:2;					// 保留unsigned int	nExtendedmodel:4;				// 扩展设计unsigned int	nExtendedFamily:8;				// 用主页unsigned int	nReserved2:4;					// 保留unsigned char	nBrandIndex:8;					// 品牌索引unsigned char	nSizeOfCacheLine:8;				// CLFLUSH 缓存行的大小,在多次字长unsigned char	nLogicalProcessorCount:8;		// 逻辑处理器计数unsigned char	nInitApicId:8;					// 初始 APIC IDunsigned char	bSSE3:1;						// SSE3 新命令unsigned char	nReserved3:2;					// 保留unsigned char	bMonitor:1;						// MONITOR/MWAITunsigned char	bCPLDebugStore:1;				// 限定 CPL 调试存储 (Intel)unsigned char	bVirtualMacExt:1;				// 虚拟机扩展 (Intel)unsigned char	bSaferModeExt:1;				// 安全模式扩展 (Intel)unsigned char	bEnhancedSpeedStep:1;			// 增强的 Intel SpeedStep 技术 (Intel)unsigned char	bThermalMonitor:1;				// 热量监视器 (Intel)unsigned char	bSIMDExt3:1;					// 添加的流 SIMD 扩展 3 (SSSE3)unsigned char	nL1ContextID:1;					// L1 上下文 ID (Intel)unsigned char	nReserved4:1;					// 保留unsigned char	b256BitFMAExt:1;				// 256 位 FMA 扩展 (Intel)unsigned char	bCMPXCHG16B:1;					// CMPXCHG16B 支持unsigned char	bXTPRUpdateCtrl:1;				// xTPR 更新控件unsigned char	bDebugCapabilityMSR:1;			// 穿孔机/调试功能 MSRunsigned char	nReserved5:2;					// 保留unsigned char	bDCA:1;							// 直接缓存支持 (DCA) (Intel)unsigned char	bSSE4_1Ext:1;					// SSE4.1 扩展unsigned char	bSSE4_2Ext:1;					// SSE4.2 扩展unsigned char	bX2APIC:1;						// x2APIC 支持 (Intel)unsigned char	bMOVBE:1;						// MOVBE 支持 (Intel)unsigned char	bPOPCNT:1;						// POPCNT 命令支持unsigned char	nReserved6:1;					// 保留unsigned char	bAES:1;							// AES 支持 (Intel)unsigned char	bXSAVE:1;						// XSAVE 支持 (Intel)unsigned char	bOSXSAVE:1;						// OSXSAVE 支持 (Intel)unsigned char	b256AVX:1;						// 256 位 Intel 高级矢量扩展 (Intel)unsigned char	nReserved7:3;					// 保留unsigned int	bFPU:1;							// 芯片的 x87 FPUunsigned int	bVME:1;							// 虚拟模式提高 8086unsigned int	bDE:1;							// 调试扩展unsigned int	bPSE:1;							// 页大小扩展unsigned int	bTSC:1;							// 时间戳计数器unsigned int	bMSR:1;							// RDMSR 和 WRMSR 支持unsigned int	bPAE:1;							// 物理地址扩展unsigned int	bMCE:1;							// 检查计算机的异常unsigned int	bCX8:1;							// CMPXCHG8 B 命令unsigned int	bAPIC:1;						// 芯片的 APICunsigned int	nReserved8:1;					// 保留unsigned int	bSEP:1;							// SYSENTER 和 SYSEXITunsigned int	bMTRR:1;						// 内存类型之间注册unsigned int	bPGE:1;							// PTE 全局位unsigned int	bMCA:1;							// 检查计算机的体系结构unsigned int	bCMOV:1;						// 条件移动/比较命令unsigned int	bPAT:1;							// 页属性表unsigned int	bPSE36:1;						// 36 位页大小扩展unsigned int	bPSN:1;							// 处理器号unsigned int	bCLFSH:1;						// CFLUSH 命令unsigned int	nReserved9:1;					// 保留unsigned int	bDS:1;							// 调试存储unsigned int	bACPI:1;						// 热量监视和时钟控件unsigned int	bMMX:1;							// MMX 技术unsigned int	bFXSR:1;						// FXSAVE/FXRSTORunsigned int	bSSE:1;							// SSE 扩展unsigned int	bSSE2:1;						// 将扩展unsigned int	bSS:1;							// 自爱与闲事的用户unsigned int	bHTT:1;							// 多线程处理unsigned int	bTM:1;							// 热量监视器unsigned int	nReserved10:1;					// 保留unsigned int	bPBE:1;							// 等待中断启用
}CPU_1, *PCPU_1;
#endif

test.cpp
#include "cpu.h"
#include "cpu_def.h"
#include 
#include 
#include 
int main()
{int		pnCpuInfo[4] = {0};void*	pCpu = NULL;{__cpuid(pnCpuInfo, 0);pCpu = (PCPU_0)pnCpuInfo;}printf("%d", sizeof(CPU_1));{__cpuid(pnCpuInfo, 1);pCpu = (PCPU_1)pnCpuInfo;}return 0;
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部