如何判断我的处理器是32位还是64位(用您选择的语言)?我想知道英特尔和AMD处理器的这一点。
答案 0 :(得分:20)
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;
}
答案 1 :(得分:8)
C#,OS不可知
sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"
这有些粗糙,但基本上告诉您CLR是以32位还是64位运行,这更有可能是您需要知道的。例如,CLR可以在64位处理器上以32位运行。
有关详细信息,请参阅此处:How to detect Windows 64-bit platform with .NET?
答案 2 :(得分:4)
这里棘手的一点是你可能有64位CPU但32位操作系统。如果你关心这种情况,它将需要一个asm存根来询问CPU。如果没有,您可以轻松询问操作系统。
答案 3 :(得分: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
}
PowerShell的
if( [IntPtr]::Size * 8 -eq 64 )
{
#x64 code
}
答案 4 :(得分: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
}
答案 5 :(得分: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',
'')
ETC。
这看起来更像是实时数据: - )
答案 6 :(得分:0)
我在想,在64位处理器上,指针是64位的。因此,可以使用指针以编程方式“测试”它,而不是检查处理器功能。它可以像创建一个带有两个连续指针的结构一样简单,然后检查它们的“步幅”。
答案 7 :(得分:0)
C#代码:
int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
Text = "64 bit";
}
else if (size == 4)
{
Text = "32 bit";
}
答案 8 :(得分:0)
在linux中,您可以通过阅读
来确定“位数”/proc/cpuinfo
例如。
cat /proc/cpuinfo | grep flags
如果它包含
lm
标记它是一个x86 64位CPU(即使你安装了32位Linux)
不确定这是否也适用于非x86 CPU,例如PPC或ARM。