如何以编程方式检测64位或32位计算机?

3
我不理解32位和64位代表什么。人们似乎说64位的电脑运行速度更快,但是为什么呢?这是否意味着有64位整数而不是32位?如果是这样的话,是否有一种方法编写程序来确定我们正在使用的是32位还是64位机器?

有很多种方法 - 你使用哪种计算机语言/操作系统? - Johan Kotlinski
任何编程语言都可以。但是最好尽可能通用,例如Java,因为几乎每个操作系统都支持JVM。 - foobar
4个回答

6

在64位机器上,指针是8字节(64位)。在32位机器上,它们是4字节(32位)。因此,我们可以通过指针的大小来确定我们正在处理什么,这是最简单的形式:

#define IS_64BIT (sizeof(void *) == 8)

唯一的缺点是以 32 位模式运行的 64 位计算机将会被识别为 32 位。当然,实际上这并不重要,因为在所有意义上,64 位计算机上的 32 位操作系统就是一个 32 位计算机。

3

64位机器并不比32位机器运行得更快,除非进行64位数学计算或需要超过4GB的RAM。

64位AMD(以及后来的英特尔)机器比32位x86机器运行得更快,因为当AMD设计新指令集时,他们增加了更多的CPU寄存器,并将SSE数学作为默认选项。

32位x86系统可能会浪费大量的CPU时间在RAM中传输数据,而x86_64系统可以将该数据存储在CPU寄存器中。寄存器比一级CPU缓存要快得多。拥有更多寄存器还可以节省需要将寄存器的旧值存储在RAM中,从RAM中加载不同值,然后再从RAM中加载原始值的CPU指令。

在某些特别缺乏寄存器的情况下,额外的寄存器可以使程序的速度提高30%。但是通常效益远不止于此。

假设SSE2带来的速度优势很多。在32位CPU中,SSE指令可能存在,也可能不存在,因此,为了使用它们,软件需要具备笨拙的测试代码和两个(或更多!)数学函数实现。大多数软件并不太关心,因此它从不费心,总是回到486时代的x87 FPU数学。64位CPU将SSE2作为指令集的必需部分,因此所有x86_64程序都可以假设它存在,并在所有情况下使用它。


3

实际上,您在这里询问了几件不同的事情。

首先是CPU。大多数现代CPU(大约过去5年)都支持64位。

现在仅因为CPU支持它,并不意味着操作系统支持它,这就是您需要选择64位操作系统或32位操作系统(32位也被称为x86,x86指的是CPU指令集中的一些小技术差异,但对于大多数常见用途,x86和32位是可以互换的)

即使操作系统支持它,也不意味着您运行的特定程序支持64位。大多数(如果不是全部?)64位操作系统都具有32位仿真模式,因此您仍然可以运行32位程序。

现在回答您如何确定您正在运行哪种架构的问题,最可靠的方法是通过某些API调用向操作系统询问。

至于为什么64位有时被认为更快,因为使用32位只能寻址4GB内存,而使用64位时,由地址空间引起的限制要高得多(大约高出40亿倍),并且限制因素是硬件而不是地址空间。至于何时以及为什么更多的内存更快,则是一个完全不同的话题。


-1

64位计算机并不会本质上运行得更快。它只能支持更高的精度(更大的整数,更精确的浮点数)。

在一些罕见的情况下,库可能会将两个32位数字压缩成64位以执行大量并行操作,可能导致潜在的最多2倍的加速。这可能发生在某些高度优化的科学/数值库中,或者在某些特殊应用程序中(由于某种原因)已经在非常低的级别上进行了高度优化。例如,一些多媒体软件。需要注意的是,即使在32位模式下,这样的应用程序也可以进行这种权衡,但选择不这样做;他们仅仅为了并行性而牺牲了精度(他们可能不需要)。

显示更快性能(可能<10%的改进)的操作系统基准测试并不一定与64位相关的优化有关。64位架构可能与拥有更多寄存器或程序可以利用的高级功能相关 [引用:http://www.tuxradar.com/content/ubuntu-904-32-bit-vs-64-bit-benchmarks],这可能是性能差异的原因(以及其他变量)。

如何确定 CPU 是 32 位还是 64 位取决于您使用的操作系统。例如,在 Linux 上,您可以调用 uname -a ,但可能有更好的方法来执行此操作。如果您正在使用 C/C++,请参见其他答案以了解在程序中确定它的方法。

2
还有更大的地址空间带来的更多物理内存,也不要忘记。 - Stu Mackellar
64位操作系统比32位操作系统运行更快... http://64-bit-computers.com/windows-vista-32-bit-vs-64-bit-benchmark.html - Oskar Kjellin
1
@Oskar 可以,但不一定。这取决于你正在运行哪些操作。在某些情况下,它可能会更慢,并显示在你发布的内容中。 - Davy8
@Stu:我知道并想提一下,但与问题主题无关,还是谢谢你。 @Oskar:可能快了最多10%,可能是实验误差,或者更有可能是操作系统的小意外调整。如果您在32位或64位上运行相同的程序,则除非您进行像将32位填充到64位两个两个一样的大修改之类的主要黑客攻击,否则它将以相同的速度运行。 - ninjagecko
1
如果程序编写正确,某些程序在64位架构上运行会快得多,因为它们可以在单个指令中完成更多的工作。但一般来说,这只适用于已经针对64位进行了优化的计算密集型任务。信号处理是一个很好的例子,可以证明这一点。 - Stu Mackellar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接