cpuid 命令を使用した Linux 上の CPU 情報へのアクセス
この質問では、開発者は、cpuid 命令を使用して Linux 環境の CPU 情報にアクセスしようとしています。 Windows API の _cpuinfo() 関数に似たメソッド。提供されたコードは、アセンブリ命令 (cpuid) を利用してこの情報を取得しようとしますが、開発者は手動アセンブリの必要性を避けたいと考えています。
解決策は、コードをコンパイルするときに使用できる cpuid.h ヘッダー ファイルを利用することです。 GCC。このヘッダーは 2 つの関数を宣言しています:
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);
__get_cpuid_max 関数は、cpuid 命令でサポートされている最大の入力値を返します。 __ext は、基本情報の場合は 0x0、拡張情報の場合は 0x8000000 として指定できます。
__get_cpuid 関数は、指定したレベルの CPU 情報を取得し、eax、ebx、ecx、および edx レジスタ内のデータを返します。成功した場合はゼロ以外の値を返し、要求されたレベルがサポートされていない場合はゼロを返します。
使用例:
#include
#include
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
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3