cpuid 命令を使用した Linux 上の CPU 情報へのアクセス
この質問では、開発者は、cpuid 命令を使用して Linux 環境の CPU 情報にアクセスしようとしています。 Windows API の _cpuinfo() 関数に似たメソッド。提供されたコードは、アセンブリ命令 (cpuid) を利用してこの情報を取得しようとしますが、開発者は手動アセンブリの必要性を避けたいと考えています。
解決策は、コードをコンパイルするときに利用可能な cpuid.h ヘッダー ファイルを利用することです。 GCC。このヘッダーは 2 つの関数を宣言しています:
<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>
以上が「cpuid」命令を使用してLinuxでCPU情報にアクセスする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。