質問

知りたいと思い自分がその気にさえなれば周辺にはいくつかの良い例はC++のCPUID実施できるから参照を管理します。純ます。

また、この場合、うする意識のある実装の違いX86およびX64?

を使用したいのでCPUID得情報、機械の私のソフトウェアないようにするには、(crashreportingなど)および上がっていきたいものとして広く対応しています。

主な理由は、私は私計手伝いを書かごろまでにすべての機指示をしたが基本的な知識CPUのレジスタなど...。

前もっと多くの中国人が語るGoogle:この例のオンラインで普段なかったため相互作用から管理コードなの両立を図るX86およびX64.一例が登場するX86固有のものです。

役に立ちましたか?

解決

アクセス原CPUID情報というのは実は非常に容易で、ここではC++のクラスではこの作品には、Windows、Linux、OSX:

#ifndef CPUID_H
#define CPUID_H

#ifdef _WIN32
#include <limits.h>
#include <intrin.h>
typedef unsigned __int32  uint32_t;

#else
#include <stdint.h>
#endif

class CPUID {
  uint32_t regs[4];

public:
  explicit CPUID(unsigned i) {
#ifdef _WIN32
    __cpuid((int *)regs, (int)i);

#else
    asm volatile
      ("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
       : "a" (i), "c" (0));
    // ECX is set to zero for CPUID function 4
#endif
  }

  const uint32_t &EAX() const {return regs[0];}
  const uint32_t &EBX() const {return regs[1];}
  const uint32_t &ECX() const {return regs[2];}
  const uint32_t &EDX() const {return regs[3];}
};

#endif // CPUID_H

利用でインスタンスを生成クラスのインスタンス負荷のCPUID命令の興味のある調査を行登録する例えば:

#include "CPUID.h"

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[]) {
  CPUID cpuID(0); // Get CPU vendor

  string vendor;
  vendor += string((const char *)&cpuID.EBX(), 4);
  vendor += string((const char *)&cpuID.EDX(), 4);
  vendor += string((const char *)&cpuID.ECX(), 4);

  cout << "CPU vendor = " << vendor << endl;

  return 0;
}

このWikipediaページが分かるので使用方法CPUID: http://en.wikipedia.org/wiki/CPUID

編集: 追加 #include <intrin.h> Windowsの場合は、単にコメントなし。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top