Подтвердить что ты не робот

Как узнать, имеет ли мой процессор 32 или 64 бита?

Как узнать, является ли мой процессор 32-разрядным или 64-битным (на вашем языке выбора)? Я хочу знать это как для процессоров Intel, так и для AMD.

4b9b3361

Ответ 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.