使用 cpuid 指令访问 Linux 上的 CPU 信息
在这个问题中,开发人员试图使用方法类似于 Windows API 中的 _cpuinfo() 函数。提供的代码尝试利用汇编指令(cpuid)来检索此信息,但开发人员希望避免手动汇编的需要。
解决方案在于利用编译代码时可用的 cpuid.h 头文件海湾合作委员会。该标头声明了两个函数:
<code class="c">unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig); int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);</code>
__get_cpuid_max 函数返回 cpuid 指令支持的最高输入值。您可以将 __ext 指定为 0x0(表示基本信息)或 0x8000000(表示扩展信息)。
__get_cpuid 函数检索指定级别的 CPU 信息,并返回 eax、ebx、ecx 和 edx 寄存器中的数据。如果成功,则返回非零值;如果不支持请求的级别,则返回零。
使用示例:
<code class="c">#include <stdio.h> #include <cpuid.h> int main() { unsigned int eax, ebx, ecx, edx; // Get maximum supported CPUID level unsigned int max_level = __get_cpuid_max(0x0, NULL); // Iterate over different CPUID levels for (unsigned int level = 0; level <= max_level; level++) { // Retrieve CPUID data for the current level __get_cpuid(level, &eax, &ebx, &ecx, &edx); printf("Level %u: EAX=%u, EBX=%u, ECX=%u, EDX=%u\n", level, eax, ebx, ecx, edx); } return 0; }</code>
以上是如何在 Linux 中使用“cpuid”指令访问 CPU 信息?的详细内容。更多信息请关注PHP中文网其他相关文章!