如何在C++中使用cpuid获取处理器信息

1949idc 2年前 (2024-09-18) 阅读数 315 #编程语言

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 信息。

版权声明

本文内容由互联网用户自发贡献,该文观点仅代表作者本人
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

© 2010 首途云安 & 厦门硕顿信息技术有限公司 & 闽ICP备11016866号  增值电信业务经营许可证:B1-20203020 地址:福建厦门思明区嘉禾路297号1806
高新技术企业
软件产品证书
计算机软件著作权
ISO认证
国家3A企业