如何在Windows / Linux C上检查CPU名称,型号,速度?
我想获得一些关于硬件的C信息:
- 我有多少CPU
- 每个核心有多少个核心
- 每个CPU中每个核心有多少个逻辑核心
- CPU名称+型号
- CPU速度+频率
- CPU架构(x86,x64)
我知道在类似Linux的操作系统上我可以解析/proc/cpuinfo
但由于它不是普通文件,我认为它不安全。 在SO上看到这个答案,但它并没有给我我需要的每一个信息。 我应该调用cat /proc/cpuinfo > file.txt
然后解析file.txt
吗? 我知道cpuid.h
(我正在使用GCC)但是找不到关于这个标题的任何文档(无论如何 – 使用它是个好主意吗?)
Linux procfs的假文件可能会出现问题。 内核错误地将它们报告为常规文件,但它们不像在符合要求的POSIX系统上那样需要常规文件。 有关示例,请访问http://www.openwall.com/lists/musl/2013/05/05/9 。 我怀疑你听过类似的报道,而这正是你关注的问题所在。
据说,据我所知, /proc
假冒“常规文件”的所有不良行为仅与写作有关。 对于阅读,它们的行为应该与实际常规文件足够相似,您可以随意阅读它们而不用担心它。
对于Windows,您需要GetSystemInfo
函数; 微软有一个例子 。 在Linux上, /proc/cpuinfo
完全“安全”,无论这意味着什么,但已经有了这个问题的答案 。
如果您只关心与intel兼容的CPU,则可以使用汇编程序指令
cpuid
作为内联asm或作为单独的asm目标文件。
例如,要检查供应商,您将使用函数0:
xor eax, eax ; load eax with function 0 cpuid ; call cpuid
现在供应商ID位于寄存器ebx, ecx, edx
。 存在类似的function来读取所有其他信息。
有关更多信息,请阅读本文