如何在Windows / Linux C上检查CPU名称,型号,速度?

时间:2013-09-03 12:39:46

标签: c linux cpu cpu-architecture cpu-speed

我想获得一些关于硬件的C信息:

  1. 我有多少CPU
  2. 每个核心有多少核心
  3. 每个CPU中每个核心有多少个逻辑核心
  4. CPU名称+型号
  5. CPU速度+频率
  6. CPU架构(x86,x64)
  7. 我知道在类似Linux的操作系统上我可以解析/proc/cpuinfo,但由于它不是普通文件,我认为它不安全。看到this回答SO但是它并没有给我提供我需要的每一个信息。我应该拨打cat /proc/cpuinfo > file.txt然后解析file.txt吗?我知道cpuid.h(我正在使用GCC),但是找不到关于这个标题的任何文档(无论如何 - 使用它是个好主意吗?)

3 个答案:

答案 0 :(得分:4)

对于Windows,您需要GetSystemInfo功能; Microsoft has an example。在Linux上,/proc/cpuinfo完全“安全”,无论这意味着什么,但已经an answer to this question

答案 1 :(得分:3)

Linux procfs的假文件可能会出现问题。内核错误地将它们报告为常规文件,但它们的行为不像符合POSIX系统所需的常规文件。有关示例,请参阅http://www.openwall.com/lists/musl/2013/05/05/9。我怀疑你听过类似的报道,而这正是你关注的地方。

据说,据我所知,/proc中假冒“常规文件”的所有不良行为仅与写作有关。对于阅读,它们的行为应该与实际常规文件非常相似,您可以随意阅读它们而不用担心它。

答案 2 :(得分:0)

如果您只关心与Intel兼容的CPU,则可以使用汇编程序指令

cpuid

作为嵌入式asm或作为单独的asm目标文件。

例如,要检查供应商,您可以使用功能0:

xor eax, eax  ; load eax with function 0
cpuid         ; call cpuid

现在,供应商ID位于寄存器ebx, ecx, edx中。存在类似的功能来读取所有其他信息。

有关更多信息,请阅读this