C++ 获取CPU info

#include <iostream>

#include <intrin.h>
#include <string>
using namespace std;


void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType);  
void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue);  
char * get_cpuId();  


void main(void)
{
	char pCpuId[32] = "";
	get_cpuId(pCpuId);
	cout<<pCpuId<<endl;
	system("pause");
	return;
}
char* get_cpuId(char *pCpuId)  
{  
	
	int dwBuf[4];  
	getcpuid((unsigned int *)dwBuf, 1);  
	sprintf(pCpuId,"%08X",dwBuf[3]);
	sprintf(pCpuId + 8, "%08X", dwBuf[0]);
	return pCpuId;  
}  

void getcpuid(unsigned int *CPUInfo, unsigned int InfoType)  
{  
#if defined(__GNUC__)// GCC  
	__cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);  
#elif defined(_MSC_VER)// MSVC  
#if _MSC_VER >= 1400 //VC2005才支持__cpuid  
	__cpuid((int*)(void*)CPUInfo, (int)(InfoType));  
#else //其他使用getcpuidex  
	getcpuidex(CPUInfo, InfoType, 0);  
#endif  
#endif  
}  

void getcpuidex(unsigned int *CPUInfo, unsigned int InfoType, unsigned int ECXValue)  
{  
#if defined(_MSC_VER) // MSVC  
#if defined(_WIN64) // 64位下不支持内联汇编. 1600: VS2010, 据说VC2008 SP1之后才支持__cpuidex.  
	__cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue);  
#else  
	if (NULL==CPUInfo)  
		return;  
	_asm{  
		// load. 读取参数到寄存器.  
		mov edi, CPUInfo;  
		mov eax, InfoType;  
		mov ecx, ECXValue;  
		// CPUID  
		cpuid;  
		// save. 将寄存器保存到CPUInfo  
		mov [edi], eax;  
		mov [edi+4], ebx;  
		mov [edi+8], ecx;  
		mov [edi+12], edx;  
	}  
#endif  
#endif  
}  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值