実行中にシステムアーキテクチャ(x86 / x64)を検出する
-
06-07-2019 - |
質問
プログラムが 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
所属していません StackOverflow