為了在 C++ 中封裝 CPUID 功能以便復用,您可以創建一個類或結構來存儲 CPUID 信息并提供一個函數來獲取這些信息
#include<iostream>
#include<string>
#include <cstdint>
class CPUID {
public:
// 構造函數,調用 cpuid 指令并存儲結果
CPUID() {
uint32_t eax, ebx, ecx, edx;
cpuid(0, eax, ebx, ecx, edx);
vendor_id += std::string(reinterpret_cast<const char*>(&ebx), 4);
vendor_id += std::string(reinterpret_cast<const char*>(&edx), 4);
vendor_id += std::string(reinterpret_cast<const char*>(&ecx), 4);
}
// 返回 CPU 制造商 ID
const std::string& get_vendor_id() const {
return vendor_id;
}
private:
std::string vendor_id;
// 使用內聯匯編調用 cpuid 指令
static void cpuid(uint32_t level, uint32_t& eax, uint32_t& ebx, uint32_t& ecx, uint32_t& edx) {
#ifdef _WIN32
__cpuidex(reinterpret_cast<int*>(&eax), level, 0);
#else
asm volatile (
"cpuid"
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
: "a"(level), "c"(0)
);
#endif
}
};
int main() {
CPUID cpuid;
std::cout << "CPU Vendor ID: "<< cpuid.get_vendor_id()<< std::endl;
return 0;
}
這個示例展示了如何創建一個名為 CPUID
的類,該類在構造時調用 CPUID 指令并存儲 CPU 制造商 ID。然后,我們提供了一個名為 get_vendor_id()
的成員函數來返回存儲的 CPU 制造商 ID。
請注意,此代碼示例需要在支持 x86 或 x86-64 架構的編譯器上運行,因為它使用了特定于該架構的內聯匯編。