11

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

4

9 回答 9

20

视窗,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;
}
于 2009-05-05T13:38:24.917 回答
8

C#,与操作系统无关

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

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

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

于 2009-05-05T14:43:50.843 回答
4

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

于 2009-05-05T15:14:46.963 回答
2

在 .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
}

电源外壳

if( [IntPtr]::Size * 8 -eq 64 )
{
    #x64 code 
}
于 2009-06-05T11:40:31.753 回答
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 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
}
于 2009-06-05T11:17:19.383 回答
1

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

等等。

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

于 2009-06-05T11:52:48.530 回答
0

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

于 2009-05-05T14:39:44.503 回答
0

C#代码:

int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
 Text = "64 bit";
}
else if (size == 4)
{
 Text = "32 bit";
}
于 2009-06-05T11:41:25.933 回答
0

在linux中,您可以通过阅读来确定“位数”

/proc/cpuinfo

例如。

cat /proc/cpuinfo | grep flags

如果它包含

lm

标记它是 x86 64 位 CPU(即使您安装了 32 位 linux)

不确定这是否适用于非 x86 CPU 以及 PPC 或 ARM。

于 2009-06-05T12:29:12.013 回答