自分のプロセッサが 32 ビットか 64 ビットか (選択した言語で) を確認するにはどうすればよいですか? Intel プロセッサと AMD プロセッサの両方についてこれを知りたいです。
9 に答える
Windows、C/C++:
#include <windows.h>
SYSTEM_INFO sysInfo, *lpInfo;
lpInfo = &sysInfo;
::GetSystemInfo(lpInfo);
switch (lpInfo->wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
case PROCESSOR_ARCHITECTURE_IA64:
// 64 bit
break;
case PROCESSOR_ARCHITECTURE_INTEL:
// 32 bit
break;
case PROCESSOR_ARCHITECTURE_UNKNOWN:
default:
// something else
break;
}
C#、OSに依存しない
sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"
これはやや大雑把ですが、基本的にCLRが32ビットまたは64ビットのどちらで実行されているかを示します。これは、知っておく必要がある可能性が高いです。たとえば、CLRは64ビットプロセッサで32ビットとして実行できます。
詳細については、こちらを参照してください:.NETでWindows64ビットプラットフォームを検出する方法
ここで注意が必要なのは、CPU が 64 ビットで OS が 32 ビットの場合です。そのケースを気にする場合は、CPU に問い合わせるために asm スタブが必要になります。そうでない場合は、OS に簡単に問い合わせることができます。
.NET では、IntPtr 構造体の Size プロパティを調べることで、x86 と x64 を区別できます。IntPtr.Sizeプロパティは、1 バイトあたり 8 ビットのバイト単位で返されるため、32 ビット CPU では 4、64 ビット CPU では 8 に等しくなります。4 バイトや 8 バイトのプロセッサではなく、32 ビットや 64 ビットのプロセッサについて話しているので、ビット単位で比較すると、何が起こっているのかがより明確になります。
C#
if( IntPtr.Size * 8 == 64 )
{
//x64 code
}
パワーシェル
if( [IntPtr]::Size * 8 -eq 64 )
{
#x64 code
}
VBScript、Windows:
Const PROCESSOR_ARCHITECTURE_X86 = 0
Const PROCESSOR_ARCHITECTURE_IA64 = 6
Const PROCESSOR_ARCHITECTURE_X64 = 9
strComputer = "."
Set oWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessors = oWMIService.ExecQuery("SELECT * FROM Win32_Processor")
For Each oProcessor In colProcessors
Select Case oProcessor.Architecture
Case PROCESSOR_ARCHITECTURE_X86
' 32-bit
Case PROCESSOR_ARCHITECTURE_X64, PROCESSOR_ARCHITECTURE_IA64
' 64-bit
Case Else
' other
End Select
Next
今回はJScriptで、PROCESSOR_ARCHITECTURE環境変数を使用するWindows ScriptHostの別の可能な解決策:
var oShell = WScript.CreateObject("WScript.Shell");
var oEnv = oShell.Environment("System");
switch (oEnv("PROCESSOR_ARCHITECTURE").toLowerCase())
{
case "x86":
// 32-bit
case "amd64":
// 64-bit
default:
// other
}
Python の場合:
In [10]: import platform
In [11]: platform.architecture()
Out[11]: ('32bit', 'ELF')
いつものように、かなりきれいです。しかし、これらの関数は、exec が実行されているプラットフォームではなく、exec がビルドされたプラットフォームを返すと確信しています。一部のマニアが 64 ビット コンピュータで 32 ビット バージョンを実行している可能性はまだわずかにあります。
次のような情報をさらに取得できます。
In [13]: platform.system()
Out[13]: 'Linux'
In [19]: platform.uname()
Out[19]:
('Linux',
'asus-u6',
'2.6.28-11-generic',
'#42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009',
'i686',
'')
等。
これはライブデータのように見えます:-)
64ビットプロセッサでは、ポインターは64ビットだと思っていました。したがって、プロセッサの機能をチェックする代わりに、ポインターを使用してプログラムで「テスト」することが可能かもしれません。2 つの連続したポインターを使用して構造を作成し、それらの「ストライド」をチェックするのと同じくらい簡単です。
C# コード:
int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
Text = "64 bit";
}
else if (size == 4)
{
Text = "32 bit";
}
Linuxでは、次を読むことで「ビット数」を判断できます
/proc/cpuinfo
例えば。
cat /proc/cpuinfo | grep flags
それが含まれている場合
lm
x86 64 ビット CPU であるというフラグを立てます (32 ビットの Linux がインストールされている場合でも)
これが PPC や ARM などの x86 以外の CPU でも機能するかどうかは不明です。