处理器,操作系统:32位,64位

31

我是一个非CS背景(没有正式学位)的编程新手,主要使用C#编写winforms。

我对32位和64位有些困惑...我知道有32位操作系统、32位处理器,以及基于这些的程序可以占用最大内存。它如何影响程序的速度?还有很多问题经常在我的脑海中浮现。

我尝试阅读了一些《计算机组成与体系结构》的书籍。但是,我要么太笨了无法理解书中写的内容,要么作者假设读者有一些CS背景。

有人能用简单易懂的英语解释这些事情,或者指向一些能做到这一点的东西吗。

编辑:我已经读到过类似“在32位模式下,它们可以访问高达4GB的内存;在64位模式下,它们可以访问更多的内存……”这样的东西。我想知道为什么会这样。

赏金:下面的答案都非常好,特别是Martin的回答。但是,我正在寻找一种详尽的解释,而且用简单易懂的英语。


2
但是,我可能太傻了,无法理解那里所写的内容,或者作者假设读者有一些计算机科学背景。当然,如果你没有计算机科学学位,这并不会有所帮助。许多人即使拥有计算机科学学位也不能正确使用指针之类的东西。 - Matthew Scharley
12
CS学位并不等于程序员。为什么人们认为有CS学位的人应该能够编程?CS是关于理论的,不是编程。 - Kevin Babcock
1
我不认为计算机科学学位等同于程序员……只是我觉得如果你有计算机科学学位,你更适合编程。也许我是错的。 - Sandbox
与https://dev59.com/eXM_5IYBdhLWcg3wq1CF相关的内容。 - Gordon Gustafson
2
很难确定你想要的回答水平。简而言之,人类使用十进制计数(数字从0到9),计算机使用二进制计数(位,数字0,1)。由于仅计数到1有点受限,而处理无限数量则有点太困难,32位计算机被设计为能够高效地处理32位(可以在十进制中计数到4294967296)。64位处理器被设计为能够处理更多的数据。一个数字可以指向1个字节的内存(8位-出于历史原因,很少有人关心),因此4294967296最多可以指向4GB的RAM。 - nos
显示剩余2条评论
15个回答

43

让我们通过比较人类计算机来尝试回答这个关于技术的问题,希望这能为您解决一些疑惑:

需要牢记的事情

  • 尽管计算机非常神奇,但它们非常愚蠢。

存储

  • 人类有记忆(除了丈夫和政治家可能会争议)。人们将信息存储在记忆中以便后续使用。
    • 对于一个问题(例如,“你的手机号是多少?”),人们可以检索信息以给出答案(例如,“867-5309”)
  • 所有现代计算机都有存储器,并将信息存储在它们的存储器中以供以后使用。
    • 由于计算机很笨,只能问一个非常具体的问题以检索信息:“在您的存储器中X的值是多少?”
      • 在上面的问题中,X被称为地址,也可以称为指针

因此,在人类和计算机之间存在一种根本性差异:要从存储器中检索信息,计算机需要给出一个地址,而人类不需要(在某种意义上,可以说“你的手机号码”是一个地址,因为它提供的信息与“您的生日”不同,但这是另一个话题。)

数字

  • 人们使用十进制数系统,这意味着对于十进制数中的每个数字,该数字可以是0、1、2、3、4、5、6、7、8或9之一。人类每位有个选项。
  • 所有现代计算机都使用二进制数系统,这意味着对于二进制数中的每个数字,该数字只能是1或0。计算机每位有个选项。
    • 计算机术语中,一个二进制数字被称为 比特(bit),它是 binary digit 的缩写。

地址

  • 计算机内的每个地址都是一个二进制数。
  • 计算机中的每个地址都有一个最大位数(或比特数)限制。这主要是因为计算机的硬件是不灵活的(也称为固定),需要提前知道一个地址长度只会有这么长。
  • "32位"和"64位"之类的术语指的是计算机可以存储和检索信息的最长地址。在英语中,"32位"在这里的意思是“这台计算机希望其内存的指令地址不超过32个二进制位长。”
    • 正如您所想象的那样,计算机可以处理的比特数越多,它可以查找的地址就越长,因此一次可以管理的内存就越多。

32位与64位寻址

  • 对于一个不灵活(固定)的数字位数(例如2位十进制数),您可以表示的可能数字称为 范围(range)(例如00到99,或100个独特数字)。增加一个十进制位数会使范围乘以10(例如3个十进制位-> 000到999,或1000个独特数字)。
  • 这也适用于计算机,但由于它们是二进制(binary)机器而不是十进制(decimal)机器,增加一个二进制位(比特(bit))只会使范围增加2倍。

    地址范围:
    • 1位寻址可以让您讨论2个唯一的地址(0和1)。
    • 2位寻址可以让您讨论4个唯一的地址(00、01、10和11)。
    • 3位寻址可以处理8个唯一地址(000、001、010、011、100、101、110和111)。
    • 经过很长一段时间后...32位寻址可以处理4,294,967,296个唯一地址。
    • 甚至更长的一段时间后...64位寻址可以处理18,446,744,073,709,551,616个唯一地址。那是一个非常大的内存空间!
    • 影响

      这一切意味着64位计算机可以存储和检索比32位计算机多得多的信息。对于大多数用户来说,这并不意味着太多,因为浏览网页、查看电子邮件和玩纸牌游戏等事情都在32位寻址的范围内。64位的好处真正体现在需要处理大量数据的领域。数字信号处理、吉卜像素摄影和高级3D游戏都是能从使用64位环境中获得巨大提升的领域。


1
我喜欢这个解释。当您描述内存时,我预计会出现“联想”的词汇,但那太计算机科学了。人们通过关联而不是地址来检索记忆。 - pavium
1
这应该是最佳答案。我给你点赞。其他高分者都没有接近这个优秀的解释。 - San Jacinto
2
这是一个非常好的通俗解释。下次有人问我这个话题,我一定会采用这种方法。 - Rob Sobers

41

关键在于电线。

在数字电路中,只能从一个元件(CPU)传输0和1(通常是低电压和高电压)到另一个元件(存储芯片)。如果我只有一条电线,则每个时钟周期只能发送一个1或0。这意味着我只能寻址2个字节(假设使用字节寻址并且整个地址在速度上只需在1个周期内传输!)。

如果我有两根电线,我就可以寻址4个字节。因为我可以通过两根电线发送:(0,0),(0,1),(1,0)或(1,1)。所以基本上是2的#电线数量次方。

因此,如果我有32根电线,我可以寻址4 GB,如果我有64根电线,我可以寻址更多。

工程师可以采取其他技巧来寻址比电线允许的更大的地址空间。例如,将地址分成两个部分,在第一个周期中发送一半,下一个周期在第二个部分中发送。但这意味着您的存储器接口将减半。

我将我的评论编辑成了这里(未编辑);)如果有人有有趣的补充,请将其变成wiki。

正如其他评论所提到的那样,2的32次方(2的32次幂)=4294967296,即4 GB。而2的64次方是18,446,744,073,709,551,616。为了深入挖掘(您可能已经在Hennesey&Patterson中读到了这一点),处理器包含用作存储计算结果的“暂存空间”的寄存器。 CPU只知道如何进行简单的算术运算并知道如何移动数据。自然而然,这些寄存器的大小以位的宽度与其体系结构的“# -位”相同,因此32位CPU的寄存器宽度将为32位,64位CPU的寄存器宽度将为64位。

对于浮点数(用于处理双精度)或其他SIMD指令(单指令,多数据命令),会有一些例外。CPU将数据从主内存(RAM)中加载和保存。由于CPU还使用这些寄存器来计算内存地址(物理和虚拟),因此它可以寻址的内存量也与其寄存器的宽度相同。有一些CPU使用特殊的扩展寄存器来处理地址计算,但我认为这些是工程师意识到需要它后添加的“事后想法”。

目前,64位对于寻址实际物理内存而言已经足够了。由于实用性考虑,大多数64位CPU在将CPU连接到内存时都会省略掉不少线路。毕竟,在主板上布置那些总是为0的电线并不明智。更不用说为了获得最大的内存容量,需要使用40亿个DIMM插槽:)

除了提供更多的内存之外,64位处理器还为整数数字大于2^32的快速计算提供了支持。以前,程序员(或编译器,也是由程序员编写的 ;))必须通过占用两个32位寄存器并处理任何溢出情况来模拟具有64位寄存器。但在64位CPU上,这将由CPU本身处理。

缺点是,相同条件下,64位CPU(大约)会消耗比32位CPU多两倍的电路,因此会消耗更多的电力。然而,在现实中,你永远不会得到相等的比较,因为新的CPU将采用新的硅工艺制造,具有更少的功率泄漏,允许您在相同的晶圆尺寸内塞入更多的电路等。但64位架构将消耗两倍的内存。曾经被认为是x86可变指令长度的“丑陋”现在实际上是与使用固定指令大小的架构相比的优势。


这差不多是我在寻找的答案。您能否详细说明一下? - Sandbox
就像其他评论所提到的那样,2^32(2的32次方)= 4294967296,即4 GB。而2^64是18,446,744,073,709,551,616。要深入了解(您可能已经在Hennesey&Patterson中读到了这一点),处理器包含用作“临时空间”的寄存器,用于存储其计算结果。 CPU只知道如何进行简单的算术运算并知道如何移动数据。自然地,这些寄存器的大小与其体系结构的“#-bits”宽度相同,因此32位CPU的寄存器将为32位宽,而64位CPU的寄存器将为64位宽。 - tchen
在处理浮点数(以处理双精度)或其他SIMD指令(单指令,多数据命令)时,会有一些例外情况。CPU将数据从主存储器(RAM)中加载和保存。由于CPU还使用这些寄存器来计算内存地址(物理和虚拟),因此它可以寻址的内存量也与其寄存器的宽度相同。有些CPU使用特殊扩展寄存器处理地址计算,但我会称之为工程师意识到需要它后添加的“事后想法”。 - tchen
目前,64位对于寻址实际物理内存来说已经足够了。由于实用性,大多数64位CPU在将CPU连接到内存时会省略掉相当多的线路。使用宝贵的主板空间来运行始终为0的线路是没有意义的。更不用说为了获得今天DIMM密度下的最大RAM量,需要4十亿个DIMM插槽 :) - tchen
缺点是,相同条件下,64位CPU消耗的功率要比32位CPU多,这主要是因为所需电路的数量大致翻倍。然而,在实际情况中,你很难进行完全相同的比较,因为更新的CPU将采用新的硅工艺制造,这些工艺具有更低的功率泄漏,可以在相同的芯片尺寸上容纳更多的电路等等。但是,64位架构将消耗两倍的内存。曾经被认为是x86变长指令长度“丑陋”的特性现在与使用固定指令大小的架构相比实际上是一个优势。 - tchen
显示剩余2条评论

32

现代处理器可以运行在32位模式和64位模式下。在32位模式下,它们最多可以访问4GB内存;在64位模式下,它们可以访问更多的内存。旧的处理器只支持32位模式。

操作系统在安装时选择以其中一种模式使用处理器:在安装时选择是以32位模式还是64位模式来操作处理器。尽管处理器可以继续以64位模式运行,但从32位切换到64位需要重新安装系统。旧系统只支持32位模式。

应用程序也可以编写为(或编译为)32位或64位模式。兼容性更加棘手,因为当处理器在64位模式下运行时,可以作为仿真功能支持32位应用程序。因此,在64位操作系统上,您可以运行32位应用程序或64位应用程序。在32位操作系统上,您只能运行32位应用程序。

同样,选择大小主要是与您想访问的主内存量有关。许多系统上的32位应用程序通常限制为2GB,因为系统需要一些地址空间用于自身。

从性能(速度)方面来看,没有显着的差异。 64位应用程序可能会稍微慢一些,因为它们使用64位指针,因此对于给定的操作需要更多的内存访问。同时,它们也可能会稍微快一些,因为它们可以执行64位整数操作作为一条指令,而32位处理器需要用多条指令来模拟它们。但是,这些64位整数操作非常罕见。

人们还可能想知道在64位处理器上运行32位应用程序的成本是多少:在AMD64和Intel64处理器上,此仿真模式主要是硬件实现的,因此与原生运行32位应用程序相比,没有真正的性能损失。这在Itanium上有很大的不同,因为32位(x86)应用程序的仿真效果非常差。


1
先生,问题是为什么所有这样的解释都是“...32位模式下,它们可以访问高达4GB内存”。 - Sandbox
为什么使用64位指针会使64位应用程序变慢?64位处理器的整个意义在于它们可以一次访问和使用64位而不是32位。稍微大一点的可执行文件大小我可以理解,但速度变慢吗? - Matthew Scharley
3
那个问题的答案在于最大的32位数字是多少:大约是40亿。这意味着32位指针有40亿个可能的状态,可以指向内存中的40亿个不同字节,也就是4 GB。 - Matthew Scharley
3
关于4GB:它仅与2的32次方有关。如果你只有32位来存储地址,那么你就受到了限制。对于使其变慢的问题——.NET 处理大量引用(地址)。所有涉及引用的工作突然要做两倍的工作……虽然不是完全线性,但肯定是“更多”的工作。 - Marc Gravell
1
@沙盒:也许你没有意识到Marc的回答中2^32 4GB:2^32字节=2^22 KB=2^12 MB=2^2 GB=4GB。如果一个寄存器只有32位,那么你无法寻址超过2^32个内存单元。如果你还想要字节寻址(这在今天很常见),你最终会遇到4GB的限制。 - Martin v. Löwis
显示剩余3条评论

18

让我来给你讲述Binville的故事,这是一个位于荒无人烟之地的小镇。Binville只有一条通往它的道路。每个来到或离开Binville的人都必须在这条道路上行驶。但当你接近这个镇子时,道路会分叉。你可以选择向左或向右。

实际上,除了通往住宅的道路外,每条道路都有一个岔口。那些通向住宅的道路只是在房子前结束而已。没有一条道路有名字;这要归功于Binville规划委员会创建的一个巧妙的寻址方案。以下是Binville的地图,显示了道路和房屋的位置:

              ------- []  00
             /
       ------
      /      \
     /        ------- []  01
-----
     \        ------- []  10
      \      /
       ------
             \
              ------- []  11

正如您所看到的,每座房子都有一个两位数的地址。单凭这个地址就足以a)唯一标识每个房子(没有重复)并且b)告诉你如何到达那里。很容易在城里走来走去。每个岔口都带有一个零或一的标签,规划委员会称其为Binville交叉追踪器,简称bit。当你接近第一个岔路口时,看一下地址的第一位。如果是零,向左转;如果是一,向右转。然后在到达第二个岔路口时查看第二个数字,向左或向右转。

假设你想拜访住在Binville的朋友。她说她住在10号房子里。当你到达Binville的第一个岔路口时,向右转(1)。然后在第二个岔路口处向左转(0),你到了!

Binville就是这样存在了几年,但是关于它的田园风光、伟大的公园系统和慷慨的医疗保健逐渐传开了。(毕竟,如果不用花钱在路标上,可以把钱用在更好的事情上。)但是问题出现了。只有两个比特,寻址方案仅限于四个房屋!

因此,规划委员会集思广益,想出了一个计划:他们将向每个地址添加一位比特,从而将房屋数量加倍。为了实施该计划,他们将在城镇边缘建立一个新的岔路口,并为每个人分配新地址。以下是新地图,显示通往城镇和Binville新部分的新岔路口:

                     ------- []  000
                    /
              ------
             /      \
            /        ------- []  001
       -----                            Old Binville
      /     \        ------- []  010
     /       \      /
    /         ------
   /                \
  /                  ------- []  011
--
  \                  -------     100
   \                /
    \         ------
     \       /      \
      \     /        ------- []  101
       -----                            New Binville (some homes not built yet)
            \        -------     110
             \      /
              ------
                    \
                     -------     111

你有没有注意到Binville的原始居民是如何在地址前面添加一个零呢?这个新加的位表示新建的交叉路口。当位数增加一位时,地址数量就翻倍了。居民总是知道他们镇子的最大规模:只需计算2的位数次方即可。例如三位二进制数可以表示8个地址。

几年过去了,Binville再次满员了。更多的人想搬进来,于是又增加了一位(以及必要的交叉路口),将该城市的规模加倍到16个地址。接着又增加了一位,又增加了一位,再增加了一位…… Binville的地址很快就扩展到了16位,可以容纳高达216 (16,384)个住宅,但这还不够。人们不断涌入!

因此,规划委员会决定一劳永逸地解决问题:他们将一口气跳到32位。拥有超过40亿个家庭地址(232),这肯定足够了!

事实上…约25年后,Binville不再是无处不在的小镇。它现在成为了一个主要的大都市。事实上,它正在变得像一个有亿万居民的整个国家。但公园依然很好,每个人都有很好的医疗保健,所以人口不断增长。

面对不断增长的人口,规划委员会再次集思广益,并提出了扩建城市的另一个计划。这一次,他们将使用64位。你知道现在Binville市限制区域内可以容纳多少住宅吗?没错:18,446,744,073,709,551,616个。这个数字是如此之大,我们可以在大约20亿个地球上都分配地址给每个人。

使用64位并不能解决所有寻址问题。新的64位地址需要写入的空间是旧的32位地址的两倍。更糟糕的是,一些居民还没有更新他们的地址为新的64位格式,因此他们被迫进入了一个专门为仍在使用32位地址的人预留的城市封闭区域。但这没关系:使用32位的人已经拥有足够的城市资源来满足他们的需求。他们暂时感觉没有必要改变。

64位足够吗?谁知道呢,但Binville的居民正在等待128位地址的宣布……


4

Martin的回答大部分是正确和详细的。

我想提一下,所有的内存限制都是每个应用程序虚拟内存限制,而不是计算机实际物理内存的限制。事实上,即使在32位系统中,也可以在单个应用程序中使用超过4GB的内存,只是需要更多的工作,因为不能同时使用指针来访问所有内存。 链接文字

另外一个没有提到的事情是,传统x86处理器和x86-64之间的差异不仅在于指针大小,还在于指令集。虽然指针更大且占用更多内存(8字节而不是4字节),但通过更大的寄存器集(15个通用寄存器而不是8个)进行补偿,因此对于执行计算工作的代码,性能实际上可能更好。


1
+1 因为提到了虚拟内存限制和链接。你有更多这样用简单明了的英语解释这些内容的链接吗? - Sandbox
既然你提到了C#,你可能想读一下这篇文章:http://blogs.msdn.com/rmbyers/archive/2009/06/08/anycpu-exes-are-usually-more-trouble-then-they-re-worth.aspx... 在Old New Thing博客上也有更多有趣的内容,但我现在没有链接。 - Filip Navara

2
马丁的答案非常好。我想补充一些内容...由于你提到了.NET,你应该注意CLI/JIT在x86和x64之间有一些差异,具有不同的优化(例如尾调用),并且高级功能(如volatile)的某些微妙的不同行为。这些都可能对你的代码产生影响。
此外,并非所有的代码都适用于x64。任何使用DirectX或某些COM功能的东西可能会遇到问题。虽然这不是一个性能特征,但却很重要。
(我删除了“DirectX” - 我可能在那里说废话...但简单来说:你需要检查你所依赖的任何东西是否在目标平台上稳定)

微软还没有64位版本的DirectX吗? - Matthew Scharley
任何使用DirectX的东西...所以如果我没错的话,WPF使用DirectX API...那么一个WPF程序在x64上运行会有问题吗? - Sandbox
我对DirectX问题不是太了解,可能只存在于XP64上,在Vista-64 / Win7-64上问题不大。此外,WPF总是可以在必要时使用CPU而非GPU... - Marc Gravell
我想念游戏中的软件图形仿真...对于我们这些拥有强大计算机但只有集成显卡的人来说... - Matthew Scharley
DirectShow(与directx相关)实际上是相关的,相当多的directshow过滤器仅以32位模式编译/分发,因此要通过dll/com导入进行互操作,您需要一个32位进程。 - Sam Saffron
谢谢Sam - 很高兴我没有说完全的胡话 ;-p - Marc Gravell

2
将一台通用计算机的内存看做是一个巨大的宾果卡片,有数十亿个方格。为了寻址卡片上的每个单独的方格,需要使用标记每行和每列的方案,如B-5,I-12,O-52等。如果卡片上的方格足够多,最终会用完字母,因此需要重复使用更多字母并编写更大的数字,以便继续唯一寻址每个方格。随着方格数量的增加,标记中包含的字母和数字变得更加复杂。
计算机的位数量指定了其寻址复杂度的限制。32位意味着如果卡片大小超过2^32个方格,则计算机没有足够的线路和晶体管来允许它唯一地物理寻址所需的特定方格,从而读取值或向指定的内存位置写入新值。64位计算机可以单独寻址2^64个方格,但为了实现这一点,每个方格都需要更多的字母和数字,以确保每个方格都具有自己独特的地址。这就是为什么64位计算机需要更多内存的原因。
其他常见的寻址限制示例是本地电话号码。它们通常是7位数字111-2222,或者重格式化为数字1,112,222。当有超过9,999,999人需要自己的电话号码时,就需要添加区号和国家号码,这样你的电话号码从7位数变成10位数或11位数,并占用更多空间。
如果您熟悉即将到来的IPv4短缺问题,那么这是相同的问题。 IPv4地址为32位,这意味着只有2^32(约40亿)个唯一的IP地址可用,而今天还有更多的人口数量。
所有我提到的方案中都存在开销,某些部分被保留用于组织目的,因此可用空间要少得多。
64位计算机的性能承诺是,它们可以一次发送8个字节(ABCDEFGH),而不是每次发送4个字节(ABCD),因此字母表在内存的不同区域之间传输的速度最多可以快两倍。对于一些应用程序,拥有更多可用内存可以使其运行更快。
在现实世界中,英特尔等公司的64位桌面处理器实际上并不是真正的64位处理器,在几种操作类型中仍然受限于32位,因此实际上32位和64位应用程序之间的性能差距微不足道。 64位模式为您提供更多的硬件寄存器,这确实提高了性能,但对“假”64位处理器上的更多内存进行寻址也可能会在某些方面降低性能,因此通常是互相平衡的。在未来,当桌面处理器变得完全64位时,我们将看到更多的性能改进。

2
我之前的回答中似乎没有看到“寄存器”这个词。数字计算机是一堆带有算术逻辑和用于存储数据和程序的内存的寄存器。
但首先……数字计算机使用二进制表示数字,因为二进制位(“位”)0和1可以通过开关的两种状态(开/关)轻松表示。早期计算机使用电磁开关;现代计算机使用晶体管,因为它们更小更快。要小得多,速度也要快得多。
在CPU内部,开关被组合成具有有限长度的寄存器,并且通常对整个寄存器执行操作:例如,将此寄存器添加到那个寄存器等等。正如您所预期的,32位CPU具有32位长的寄存器。我在这里进行了简化,但请耐心等待。
将计算机内存组织为一系列“位置”,每个位置都持有与CPU寄存器相同数量的位是有意义的:例如,从该内存位置加载此寄存器。实际上,如果我们将内存视为“字节”,那只是一个方便的寄存器的一小部分,我们可能会从一系列内存位置(1、2、4、8)加载寄存器。
随着晶体管变得越来越小,可以在计算机芯片的有限空间中实现更复杂的算术逻辑。 CPU房地产总是很宝贵的。
但是随着芯片制造技术的改进,可以在略微较大的芯片上可靠地制造更多的晶体管。寄存器可以更长,它们之间的路径可以更宽。
当保存内存位置地址的寄存器更长时,它们可以寻址更大的内存,并且可以以更大的块操作数据。结合更复杂的算术逻辑,事情会更快地完成。
这不就是我们所有人所追求的吗?

1

解释为什么32位模式只能访问4GB的RAM:

最大可访问内存空间=2n字节,其中n是体系结构的字长。因此,在32位体系结构中,最大可访问内存空间为232=4294967296=4GB的RAM。

64位体系结构将能够访问264=大量的内存。

刚注意到Tchens的评论涉及到了这个问题。无论如何,如果没有计算机科学背景,理解计算机组织和体系结构书籍可能会很困难。


1
处理器使用二进制来存储数字。选择二进制可能是因为它是所有进位制中最“简单”的:例如,基于2的乘法表只有4个单元格,而基于“10”的乘法表则有100个单元格。
在2003年之前,普通PC处理器只能“32位可用”。
这意味着处理器的本机数值操作仅适用于32位数字。您仍然可以执行更大数字的数值操作,但这些操作必须由处理器执行的程序执行,并且不能是处理器支持的“原始操作”(机器语言中的命令),例如32位整数(当时)。选择32位是因为CPU工程师喜欢2的幂次方,而16位不够用。
为什么16位不够用?使用16位,您可以表示0-65535范围内的整数。
65535 = 1111111111111111以二进制表示(= 2 ^ 0 + 2 ^ 1 + 2 ^ 2 ... + 2 ^ 15 = 2 ^ 16-1)。
65535不够用,因为例如医院管理软件需要能够计算超过65535名患者。通常在讨论计算机整数大小时,人们会考虑计算机的内存大小。65535绝对不够用。计算机的RAM比这多得多,无论您是按字节还是按位计数。
32位被认为足够长时间了。在2003年,AMD推出了第一款64位可用的“x86”处理器。英特尔很快跟进。
实际上,很久以前就认为16位足够了。
许多硬件和软件向后兼容是常见做法。在这种情况下,它意味着64位可用的CPU也可以运行32位可用的CPU运行的所有软件。
向后兼容性是一种商业策略。如果更好的处理器也可以执行先前的所有操作,则更多用户将希望升级到更好的处理器。
在CPU中,向后兼容性意味着新的CPU支持的操作添加到先前的机器语言中。例如,先前的机器语言可能具有某些规范,例如“所有以1111开头的操作码都保留供将来使用”。
从理论上讲,这种CPU向后兼容性不是必需的,因为所有软件都可以重新编译为新的不兼容机器语言。但是,由于企业战略和政治或经济体系,这并不是事实。在一个乌托邦的“开源”世界中,机器语言的向后兼容性可能不是一个问题。
x86-64(常见的64位CPU的机器语言)的向后兼容性采用“兼容模式”的形式。这意味着希望利用新的CPU功能的任何程序都需要通知CPU(通过操作系统),让其在“64位模式”下运行。然后它可以使用强大的新CPU 64位功能。
因此,要使程序使用CPU的64位功能:CPU、操作系统和程序都必须“支持64位”。
64位足以为世界上的每个人提供几个唯一的数字。对于大多数当前的计算任务来说,它可能已经足够大了。未来的CPU可能不会进一步转向128位。但是,如果他们这样做,那肯定足够我想象的一切,因此256位的转换将不是必需的。

希望这能有所帮助。


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