Как узнать, является ли мой процессор 32-разрядным или 64-битным (на вашем языке выбора)? Я хочу знать это как для процессоров Intel, так и для AMD.
Как узнать, имеет ли мой процессор 32 или 64 бита?
Ответ 1
Windows, 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;
}
Ответ 2
С#, OS agnostic
sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"
Это несколько грубо, но в основном говорит вам, работает ли CLR как 32-разрядная или 64-разрядная, что более вероятно, что вам нужно знать. Например, CLR может работать как 32-разрядная на 64-битном процессоре.
Для получения дополнительной информации см. здесь Как определить 64-разрядную платформу Windows с .NET?
Ответ 3
Трудный бит здесь - у вас может быть 64-битный процессор, но 32-разрядная ОС. Если вы позаботитесь об этом случае, для запроса ЦП будет требоваться заглушка asm. Если нет, вы можете легко спросить ОС.
Ответ 4
В .NET вы можете отличить x86 от x64, посмотрев на свойство Size для структуры IntPtr. Свойство IntPtr.Size возвращается в байтах, 8 бит на байт, поэтому оно равно 4 на 32-битном ЦП и 8 на 64-битный процессор. Поскольку мы говорим о 32-битных и 64-битных процессорах, а не 4-байтных или 8-байтных процессорах, мне нравится делать сравнения в битах, что делает его более понятным, что происходит.
С#
if( IntPtr.Size * 8 == 64 )
{
//x64 code
}
PowerShell
if( [IntPtr]::Size * 8 -eq 64 )
{
#x64 code
}
Ответ 5
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 Script Host, на этот раз в JScript и использование переменной среды PROCESSOR_ARCHITECTURE:
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
}
Ответ 6
В Python:
In [10]: import platform
In [11]: platform.architecture()
Out[11]: ('32bit', 'ELF')
Как обычно, довольно аккуратно. Но я уверен, что эти функции возвращают платформу, на которой был создан exec, а не на платформах, на которых он работает. По-прежнему существует небольшая вероятность того, что какой-нибудь разработчик выполнит 32-битную версию на 64-битном компьютере.
У вас может появиться дополнительная информация:
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.
Это больше похоже на данные в реальном времени: -)
Ответ 7
Я думал, что на 64-битном процессоре указатели 64-битные. Таким образом, вместо проверки функций процессора возможно использовать указатели для "тестирования" программно. Это может быть так же просто, как создать структуру с двумя смежными указателями, а затем проверить их "шаг".
Ответ 8
Код С#:
int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
Text = "64 bit";
}
else if (size == 4)
{
Text = "32 bit";
}
Ответ 9
В linux вы можете определить "битту", прочитав
/proc/cpuinfo
например.
cat /proc/cpuinfo | grep flags
если он содержит
lm
отметьте его 64-разрядным процессором x86 (даже если у вас установлен 32-разрядный Linux)
Не уверен, что это работает для процессоров без x86, таких как PPC или ARM.