11

自分のプロセッサが 32 ビットか 64 ビットか (選択した言語で) を確認するにはどうすればよいですか? Intel プロセッサと AMD プロセッサの両方についてこれを知りたいです。

4

9 に答える 9

20

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;
}
于 2009-05-05T13:38:24.917 に答える
8

C#、OSに依存しない

sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"

これはやや大雑把ですが、基本的にCLRが32ビットまたは64ビットのどちらで実行されているかを示します。これは、知っておく必要がある可能性が高いです。たとえば、CLRは64ビットプロセッサで32ビットとして実行できます。

詳細については、こちらを参照してください:.NETでWindows64ビットプラットフォームを検出する方法

于 2009-05-05T14:43:50.843 に答える
4

ここで注意が必要なのは、CPU が 64 ビットで OS が 32 ビットの場合です。そのケースを気にする場合は、CPU に問い合わせるために asm スタブが必要になります。そうでない場合は、OS に簡単に問い合わせることができます。

于 2009-05-05T15:14:46.963 に答える
2

.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 
}
于 2009-06-05T11:40:31.753 に答える
1

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
}
于 2009-06-05T11:17:19.383 に答える
1

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',
 '')

等。

これはライブデータのように見えます:-)

于 2009-06-05T11:52:48.530 に答える
0

64ビットプロセッサでは、ポインターは64ビットだと思っていました。したがって、プロセッサの機能をチェックする代わりに、ポインターを使用してプログラムで「テスト」することが可能かもしれません。2 つの連続したポインターを使用して構造を作成し、それらの「ストライド」をチェックするのと同じくらい簡単です。

于 2009-05-05T14:39:44.503 に答える
0

C# コード:

int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
 Text = "64 bit";
}
else if (size == 4)
{
 Text = "32 bit";
}
于 2009-06-05T11:41:25.933 に答える
0

Linuxでは、次を読むことで「ビット数」を判断できます

/proc/cpuinfo

例えば。

cat /proc/cpuinfo | grep flags

それが含まれている場合

lm

x86 64 ビット CPU であるというフラグを立てます (32 ビットの Linux がインストールされている場合でも)

これが PPC や ARM などの x86 以外の CPU でも機能するかどうかは不明です。

于 2009-06-05T12:29:12.013 に答える