2

プログラムがc++ で (Windows および Linux で) 実行されている間に、システム/プロセッサ アーキテクチャを検出することは可能ですか?

4

4 に答える 4

4

Windows では、 を使用できます__cpuid。Linuxでは、それを調べることができますopen("/proc/cpuinfo")

MSDNページの例に基づく、Windows での例を次に示します。

#include <intrin.h>

bool cpuSupports64()
{
    int CPUInfo[4];
    __cpuid(CPUInfo, 0);
    return (CPUInfo[3] & 0x20000000) || false;
}
于 2009-10-28T12:33:19.440 に答える
3

unameLinuxでは、システムコールを使用できます。このユーザー割り当ての構造体に入力します。

  struct utsname {
           char sysname[];    /* Operating system name (e.g., "Linux") */
           char nodename[];   /* Name within "some implementation-defined
                                 network" */
           char release[];    /* OS release (e.g., "2.6.28") */
           char version[];    /* OS version */
           char machine[];    /* Hardware identifier */
       #ifdef _GNU_SOURCE
           char domainname[]; /* NIS or YP domain name */
       #endif
       };

フィールドはmachineアーキテクチャを識別します。

于 2009-10-28T13:59:00.540 に答える
0

この情報をどのように処理するかによって(たとえば、特定のCPUに対して最速のハンドコード化されたアセンブリコードを選択する)、Linuxでは/ proc / cpuinfo、具体的には「フラグ」セクションを読み、SSEから選択できます。 /SSE2実装vs.MMX実装vs.何でも。

ビッグエンディアンシステムとリトルエンディアンシステムは少し複雑です。http://en.wikipedia.org/wiki/Endianessを参照してください。

于 2009-10-28T12:48:28.607 に答える