質問

プログラムが c ++で(windowsおよびlinuxの下で)実行中にシステム/プロセッサアーキテクチャを検出することは可能ですか?

役に立ちましたか?

解決

Windowsでは、 < code> __ cpuid 。 Linuxでは、 open(&quot; / proc / cpuinfo&quot;)に目を通すことができます。

MSDN ページ:

#include <intrin.h>

bool cpuSupports64()
{
    int CPUInfo[4];
    __cpuid(CPUInfo, 0);
    return (CPUInfo[3] & 0x20000000) || false;
}

他のヒント

Linuxでは、 uname システムコールを使用できます。このユーザー割り当て構造体を埋めます:

  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 フィールドはアーキテクチャを識別します。

この情報を使用して何をするかによって(たとえば、特定のCPUに対して最速のハンドコーディングされたアセンブリコードを選択する)、Linuxでは/ proc / cpuinfoを読みたい場合があります。具体的には&quot; flags&quot;セクション。SSE/ SSE2実装とMMX実装のどちらでも選択できます。

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

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