2009-05-05 2 views
11

Wie finde ich heraus, ob mein Prozessor 32 Bit oder 64 Bit (in Ihrer Sprache der Wahl) hat? Ich möchte das sowohl für Intel- als auch für AMD-Prozessoren wissen.Wie kann ich feststellen, ob meine CPU 32 oder 64 Bit hat?

+1

Sie müssen mindestens die Sprache, die Sie versuchen, diese Informationen zu finden, in – JaredPar

+2

bereitstellen Das sieht nicht wie eine Programmierfrage aus. –

+2

Nein, keine Programmierfrage. sollte geschlossen werden –

Antwort

20

von 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; 
} 
+0

Können Sie angeben, welche Sprache dies ist (ja, * ich * weiß, andere nicht) und andere Anforderungen (z. B. Header-Dateien)? – paxdiablo

+0

Oder, was OS, was? Funktioniert das auf meinem Mac Mini, meinen Linux-Boxen und meinen Windows XP- und Vista-Systemen? –

+1

Bah - kann nicht bearbeiten ... aber so * muss * die 'default:' zu diesem Schalter hinzufügen ... :-) –

0

Ich dachte, auf einem 64-Bit-Prozessor, Zeiger sind 64-Bit. Anstatt also die Prozessoreigenschaften zu überprüfen, können Zeiger verwendet werden, um sie programmatisch zu testen. Es könnte so einfach sein wie das Erstellen einer Struktur mit zwei zusammenhängenden Zeigern und dann das Überprüfen ihres "Schritts".

+0

Nein, wird nicht mit 32-Bit-Code auf 64-Bit-fähigen Prozessor helfen. – mghie

8

C#, OS Agnostiker

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

Diese etwas roh ist aber im Grunde sagt Ihnen, ob die CLR als 32-Bit- oder 64-Bit ausgeführt wird, was wahrscheinlicher ist, was Sie würden wissen müssen. Die CLR kann beispielsweise als 32-Bit auf einem 64-Bit-Prozessor ausgeführt werden.

Weitere Informationen finden Sie hier: How to detect Windows 64-bit platform with .NET?

4

Der schwierige Bit ist für Sie vielleicht ein 64-Bit-CPU, sondern ein 32-Bit-OS. Wenn Sie sich für diesen Fall interessieren, benötigen Sie einen ASM-Stub, um die CPU abzufragen. Wenn nicht, können Sie das OS einfach fragen.

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 

Eine andere mögliche Lösung für Windows Script Host, diesmal in JScript und mit Hilfe der PROCESSOR_ARCHITECTURE Umgebungsvariable:

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 
} 
2

In .NET können Sie x86 von x64 unterscheiden indem Sie die Size-Eigenschaft der IntPtr-Struktur betrachten. Die IntPtr.Size Eigenschaft wird in Bytes, 8 Bits pro Byte zurückgegeben, so dass es gleich 4 auf einer 32-Bit-CPU und 8 auf einer 64-Bit-CPU ist. Da wir von 32-Bit- und 64-Bit-Prozessoren sprechen und nicht von 4-Byte- oder 8-Byte-Prozessoren, mache ich gerne den Vergleich in Bits, was deutlicher macht, was vor sich geht.

C#

if(IntPtr.Size * 8 == 64) 
{ 
    //x64 code 
} 

Powershell

if([IntPtr]::Size * 8 -eq 64) 
{ 
    #x64 code 
} 
0

C# Code:

int size = Marshal.SizeOf(typeof(IntPtr)); 
if (size == 8) 
{ 
Text = "64 bit"; 
} 
else if (size == 4) 
{ 
Text = "32 bit"; 
} 
1

In Python:

In [10]: import platform 
In [11]: platform.architecture() 
Out[11]: ('32bit', 'ELF') 

Wie immer, ziemlich ordentlich. Aber ich bin mir ziemlich sicher, dass diese Funktionen die Plattform zurückgeben, auf der der Exec gebaut wurde, nicht die Plattformen, auf denen er läuft. Es gibt immer noch eine kleine Chance, dass ein Geek eine 32-Bit-Version auf einem 64-Bit-Computer ausführt.

Sie können einige mehr Infos wie haben:

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

ETC.

Das sieht eher wie Live-Daten :-)

+0

Ich bin dieser Geek. 64bit Python existiert, aber es ist schwierig, vorgefertigte Module für diese Architektur zu bekommen, und fast so schwer zu bekommen, dass sie lokal kompiliert werden. – SingleNegationElimination

0

In Linux können Sie die "Bitness" bestimmen durch das Lesen

/proc/cpuinfo 

zB.

cat /proc/cpuinfo | grep flags 

wenn es enthält die

lm 

Flagge es eine CPU x86 64 Bit ist (auch wenn Sie 32-Bit-Linux installiert haben)

Nicht sicher, ob dies auch für nicht x86-CPUs arbeitet wie PPC oder ARM.

Verwandte Themen