如何判断我的处理器是32位还是64位(用您选择的语言)?我想知道英特尔和AMD处理器的这一点。

有帮助吗?

解决方案

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

其他提示

C#,OS不可知

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

这有些粗糙,但基本上告诉您CLR是以32位还是64位运行,这更有可能是您需要知道的。例如,CLR可以在64位处理器上以32位运行。

有关详细信息,请参阅此处:如何检测Windows带.NET的64位平台?

这里棘手的一点是你可能有64位CPU但32位操作系统。如果你关心这种情况,它将需要一个asm存根来询问CPU。如果没有,您可以轻松询问操作系统。

在.NET中,您可以通过查看IntPtr结构的Size属性来区分x86和x64。 IntPtr.Size 属性以字节为单位返回,每字节8位,因此在32位CPU上等于4,在64位CPU上等于8。由于我们讨论的是32位和64位处理器而不是4字节或8字节处理器,我喜欢用比特进行比较,这样可以更清楚地了解发生了什么。

C#

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

PowerShell的

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

在Python中:

In [10]: import platform
In [11]: platform.architecture()
Out[11]: ('32bit', 'ELF')
像往常一样,非常整洁。但我很确定这些函数会返回构建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',
 '')

ETC。

这看起来更像是实时数据: - )

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
}

我在想,在64位处理器上,指针是64位的。因此,可以使用指针以编程方式“测试”它,而不是检查处理器功能。它可以像创建一个带有两个连续指针的结构一样简单,然后检查它们的“步幅”。

C#代码:

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

在linux中,您可以确定“比特”。通过阅读

/proc/cpuinfo

例如。

cat /proc/cpuinfo | grep flags

如果它包含

lm

标记它是一个x86 64位CPU(即使你安装了32位Linux)

不确定这是否也适用于非x86 CPU,例如PPC或ARM。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top