ホームページ > バックエンド開発 > C++ > 「cpuid」命令を使用してLinuxでCPU情報にアクセスする方法?

「cpuid」命令を使用してLinuxでCPU情報にアクセスする方法?

Linda Hamilton
リリース: 2024-10-31 11:56:02
オリジナル
1003 人が閲覧しました

How to Access CPU Information in Linux Using the `cpuid` Instruction?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート