阅读量:0
cpuid
是一个 x86/x64 指令,它可以用来获取 CPU 的基本信息
#include <iostream> #include <string> #include <bitset> #include <cstdint> void cpuid(uint32_t eax, uint32_t ecx, uint32_t* abcd) { // 使用 GCC 和 Clang 的内建函数 #if defined(__GNUC__) || defined(__clang__) __cpuid_count(eax, ecx, abcd[0], abcd[1], abcd[2], abcd[3]); // 使用 MSVC 的内建函数 #elif defined(_MSC_VER) __cpuidex(reinterpret_cast<int*>(abcd), eax, ecx); #else #error "Unsupported compiler" #endif } std::string get_vendor_string() { uint32_t abcd[4]; cpuid(0, 0, abcd); // 将结果转换为字符串 std::string vendor; vendor += std::string(reinterpret_cast<char*>(&abcd[1]), 4); vendor += std::string(reinterpret_cast<char*>(&abcd[3]), 4); vendor += std::string(reinterpret_cast<char*>(&abcd[2]), 4); return vendor; } int main() { std::cout << "CPU Vendor: " << get_vendor_string() << std::endl; return 0; }
这个程序首先定义了一个 cpuid
函数,该函数使用编译器特定的内建函数(例如 __cpuid_count
)来执行 cpuid
指令。然后,我们定义了一个 get_vendor_string
函数,该函数调用 cpuid
函数并返回 CPU 供应商的字符串。最后,main
函数打印出 CPU 供应商的字符串。
请注意,这个示例仅适用于 x86/x64 架构的处理器。如果你需要在其他架构上运行此代码,你可能需要使用不同的指令或库函数来获取 CPU 信息。