2009-05-05 18 views
11

İşlemcimin 32 bit mi yoksa 64 bit mi (seçim dilinizde) olduğunu nasıl anlarım? Bunu hem Intel hem de AMD işlemciler için bilmek istiyorum.İşlemcimin 32 veya 64 bit olup olmadığını nasıl anlayabilirim?

+1

En azından bu bilgiyi – JaredPar

+2

numaralı belgede bulmaya çalıştığınız dili belirtmeniz gerekir. Bu, bir programlama sorusu gibi görünmüyor. –

+2

Bir programlama sorusu değil. –

cevap

20

Pencereler, C/C++: Ben 64 bit işlemci üzerinde düşünüyordum

#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

Bunun hangi dil olduğunu belirtebilir misiniz (evet, * I * biliyorum ama diğerleri değil) ve diğer gereksinimler (ör. Başlık dosyaları)? – paxdiablo

+0

Veya, bu konuda, hangi işletim sistemi? Bu benim Mac Mini, Linux kutularım ve Windows XP ve Vista sistemlerimde çalışacak mı? –

+1

Bah - düzenleme yapamıyorum ... ama bu nedenle 'default:' anahtarını eklemek için * gerekir * ... –

0

, göstericiler 64 bit vardır. Böylece, işlemci özelliklerini kontrol etmek yerine, programatik olarak 'test etmek' için işaretçiler kullanmak mümkün olabilir. İki bitişik işaretçi ile bir yapı oluşturmak ve daha sonra 'adımlarını' kontrol etmek kadar basit olabilir.

+0

Hayır, 64 bit özellikli işlemci üzerinde çalışan 32 bit koduyla yardımcı olmaz. – mghie

8

C#,

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

Bu biraz ham ama CLR daha muhtemel Bilmeniz gereken ne ise 32 bit ya da 64 bit olarak çalışır durumda olup olmadığını temelde söyler agnostik işletim sistemi. CLR, örneğin 64 bit işlemci üzerinde 32 bit olarak çalışabilir.

fazla bilgi için buraya bakın: How to detect Windows 64-bit platform with .NET?

4

burada hileli parça bir 64 bit işlemci ama 32 bit işletim sistemi olabilir olduğunu. Bu durumu önemsiyorsanız, CPU'yu sorgulamak için bir asm dizisi gerektirecektir. Değilse, OS'ye kolayca sorabilirsiniz.

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 

Windows komut dosyası, JScript'te bu zaman ve PROCESSOR_ARCHITECTURE ortam değişkeni kullanmak için başka bir olası çözüm:

NET'te
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

Eğer x64 dan x86 ayırt edebilir IntPtr yapısının Boyut özelliğine bakarak. IntPtr.Size özelliği bayt başına 8 bit olarak döndürülür, bu nedenle 32 bitlik bir CPU'da 4'e ve 64 bitlik bir CPU'da 8'e eşittir. 4 bayt veya 8 baytlı işlemciler yerine 32 bit ve 64 bit işlemcilerden bahsettiğimizden, karşılaştırmayı bitlerde yapmaktan çok daha iyi bir şey olduğunu düşünüyorum.

C#

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

PowerShell

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

C# Kod: Python

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

:

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

Her zamanki gibi, oldukça temiz. Ama eminim ki bu fonksiyonlar, platformun üzerinde çalıştığı platform değil, inşa edildiği platformu döndürüyor. Bazı ineklerin 64 bitlik bir bilgisayarda 32 bitlik bir versiyon çalıştırdığı konusunda hala küçük bir şans var.

Sen gibi bazı daha çok bilgi sahip olabilir:

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

VS.

Bu

/proc/cpuinfo 

örn okuyarak linux siz "BITNESS" belirleyebilir yılında

+0

Ben bu inekim. 64bit python var, ancak bu mimari için önceden oluşturulmuş modüller elde etmek zordur ve neredeyse yerel olarak derlenmiş çalışmayı elde etmek zordur. – SingleNegationElimination

0

:-) canlı veriler gibi daha fazla görünüyor.

cat /proc/cpuinfo | grep flags 

bu yanı olmayan x86 işlemciler için çalışır eğer öyle

lm 

flag bir x86 64 bit CPU (32 bit Linux yüklü olsa bile)

emin değil içeriyorsa PPC veya ARM gibi.

İlgili konular