使用C++窗口的CPU ID
CPU ID using C++ - windows
我想用c++获取我的计算机(windows)的CPU Id。
我用这个代码得到它。
它输出的信息类似于:
For InfoType 0
CPUInfo[0] = 0x5
CPUInfo[1] = 0x756e6547
CPUInfo[2] = 0x6c65746e
CPUInfo[3] = 0x49656e69
For InfoType 1
CPUInfo[0] = 0xf31
CPUInfo[1] = 0x20800
CPUInfo[2] = 0x41d
CPUInfo[3] = 0xbfebfbff
For InfoType 2
CPUInfo[0] = 0x605b5001
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x7c7040
For InfoType 3
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 4
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 5
CPUInfo[0] = 0x40
CPUInfo[1] = 0x40
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 80000000
CPUInfo[0] = 0x80000008
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 80000001
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 80000002
CPUInfo[0] = 0x20202020
CPUInfo[1] = 0x20202020
CPUInfo[2] = 0x20202020
CPUInfo[3] = 0x20202020
For InfoType 80000003
CPUInfo[0] = 0x47202020
CPUInfo[1] = 0x69756e65
CPUInfo[2] = 0x4920656e
CPUInfo[3] = 0x6c65746e
For InfoType 80000004
CPUInfo[0] = 0x20295228
CPUInfo[1] = 0x20555043
CPUInfo[2] = 0x30382e32
CPUInfo[3] = 0x7a4847
For InfoType 80000005
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 80000006
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x4008040
CPUInfo[3] = 0x0
For InfoType 80000007
CPUInfo[0] = 0x0
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
For InfoType 80000008
CPUInfo[0] = 0x2028
CPUInfo[1] = 0x0
CPUInfo[2] = 0x0
CPUInfo[3] = 0x0
我无法理解这些信息中哪一个是我电脑唯一的CPU Id。
有人能帮我做这件事吗。
您的意思是"序列号"、"谁制造了处理器"还是"标识处理器品牌和型号的字符串"。
序列号:
除非您有Pentium III,否则您没有与CPU关联的"唯一ID"。
英特尔在P3中引入了唯一id(序列号)指令。但在隐私问题引起轩然大波后,他们很快在随后的CPU版本中禁用了该功能。
对于记录,在汇编中执行此功能的指令:
mov eax, 3
cpuid
处理器序列号是eax、edx和ecx连接在一起的
通过将"3"作为第二个参数传递给__cpuid函数,可以实现同样的效果。但除非你有P3,否则它不会工作或返回序列号。
供应商(处理器制造商)
int regs[4] = {0};
char vendor[13];
__cpuid(regs, 0); // mov eax,0; cpuid
memcpy(vendor, ®s[1], 4); // copy EBX
memcpy(vendor+4, ®s[3], 4); // copy EDX
memcpy(vendor+8, ®s[2], 4); // copy ECX
vendor[12] = ' ';
print("My CPU is a %sn", vendor);
在您的情况下,这应该打印"GenuineIntel"。
品牌和型号(品牌字符串)
如果您想要CPUID指令的所有详细信息,包括如何获得CPU的品牌、型号和步进,以及"品牌字符串",如"英特尔(R)酷睿(TM)i7-3770 CPU@3.4GHZ……",您可以在下面的链接中参考英特尔手册。向下滚动文档以查找CPUID的文档。我懒得帮你打字。
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2a-manual.pdf
MSVC编译器提供的__cpuid()指令在调用cpuid指令之前将"InfoType"映射到EAX。在该指令返回后,EAX、EBX、ECX和EDX将被复制到传递到此函数的CPUInfo[4]数组中。
您要查看的值是制造商标识符。它对所有英特尔CPU都是一样的——当按照正确的顺序读取时,它实际上只是说"GenuineIntel":
CPUInfo[1] = 0x756e6547 = 'Genu'
CPUInfo[3] = 0x49656e69 = 'ineI'
CPUInfo[2] = 0x6c65746e = 'ntel'
AMD CPU的等价物是"AuthenticAMD"。
有关其他信息,请参阅:http://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID——但简而言之,CPUID中没有什么特别独特的地方。
请在此处查看。您需要使用__cpuid。然后你应该根据表格提取信息。
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何获取 GLFW 窗口 ID?
- 如何禁用 CPU 的无序执行
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- 使用C++窗口的CPU ID
- 通过C++在Windows上的唯一CPU ID
- 如何找出我的进程Id正在哪个物理CPU上运行