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

San*_*box 31 64-bit 32-bit processor 32bit-64bit

我是编程新手,来自非CS背景(没有正式学位).我主要使用C#编写winforms.

我对32位和64位感到困惑....我的意思是,已经听说过32位操作系统,32位处理器以及程序可以拥有的最大内存.它如何影响程序的速度.还有很多问题不断浮现在脑海中.

我试图浏览一些计算机组织和架构书籍.但是,要么我太愚蠢无法理解那里写的内容,要么作者认为读者有一些CS背景.

有人可以用一个简单的简单英语解释我这些东西,或者指出我做的事情.

编辑:我读过像32位模式这样的东西,它们可以访问高达4GB的内存; 在64位模式下,他们可以访问更多....我想知道为什么这样的事情.

BOUNTY:下面的答案非常好......尤其是马丁.但是,我正在寻找一个彻底的解释,但用简单的英语.

tch*_*hen 39

它真的归结为电线.

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

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

所以,如果我有32根线,我可以寻址4 GB,如果我有64根线,我可以解决更多问题.

工程师可以采取其他技巧来解决比电线允许的更大的地址空间.例如,将地址分成两部分,在第一个周期发送一半,在下一个周期发送后半部分.但这意味着你的内存界面将快一半.

编辑我的评论到这里(未经编辑);)如果有人有任何有趣的东西,也可以将它作为维基.

像其他评论所提到的那样,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位宽.

当涉及浮点(处理双精度)或其他SIMD指令(单指令,多数据命令)时,会有例外.CPU加载数据并将数据保存到主存储器(RAM)中.由于CPU还使用这些寄存器来计算内存地址(物理和虚拟),因此它可以寻址的内存量也与其寄存器的宽度相同.有一些CPU使用特殊的扩展寄存器来处理地址计算,但是在工程师意识到他们需要它之后我会称之为"思考之后".

目前,64位对于解决实际物理内存非常重要.由于实用性,在将CPU连接到存储器时,大多数64位CPU将省略相当多的电线.使用宝贵的主板不动产来运行总是有0的电线是没有意义的.更不用说为了拥有当今DIMM密度的最大RAM量需要40亿个dimm插槽:)

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

缺点是64位CPU(一切都相同)将比32位CPU消耗更多功率,这是因为(大约)所需电路量的两倍.然而,实际上你永远不会得到相同的比较,因为较新的CPU将在较新的硅工艺中制造,具有较少的功率泄漏,允许您在相同的芯片尺寸中填充更多电路等.但是64位架构将消耗两倍的功率记忆.与使用固定指令大小的架构相比,曾经被认为是"丑陋"的x86可变指令长度实际上是一个优势.


fbr*_*eto 39

让我们试着通过观察计算机来回答这个问题; 希望这能为你解释一些事情:

要记住的事情

  • 电脑非常非常愚蠢.

记忆

  • 人们有记忆(除了可以说是丈夫和政治家之外).人们将信息存储在他们的记忆中供以后使用.
    • 有一个问题(例如,"你的电话号码是多少?"),一个人能够检索信息以给出答案(例如,"867-5309")
  • 所有现代计算机都有内存,并将信息存储在内存中供以后使用.
    • 由于计算机是愚蠢的,他们只能被问到一个非常具体的问题来检索信息:" 你记忆中X的价值是多少?"
      • 在上面的问题中,X被称为地址,也可以称为指针.

因此,我们在人与计算机之间存在根本区别:要从内存中调用信息,需要为计算机提供地址,而人们则不需要.(从某种意义上说,可以说"你的电话号码"是一个地址,因为它提供的信息不同于"你的生日",但这是另一个对话.)

数字

  • 人们使用十进制数字系统.这意味着对于十进制数字中的每个数字,该数字可以是0,1,2,3,4,5,6,7,8或9中的一个.人们每个数字有十个选项.
  • 所有现代计算机都使用二进制数字系统.这意味着对于二进制数中的每个数字,该数字只能是1或0.计算机每个数字有两个选项.
    • 在计算机行话,单个二进制数字被称为比特,短于b inary挖.

地址

  • 计算机中的每个地址都是二进制数.
  • 计算机中的每个地址都具有可以具有的最大位数(或位数).这主要是因为计算机的硬件不灵活(也称为固定),并且需要提前知道地址只有这么长时间.
  • 像"32位"和"64位"这样的术语是关于计算机可以存储和检索信息的最长地址.在英语中,"32位"在这个意义上意味着"这台计算机需要有关其内存的指令,其地址长度不超过32位二进制数."
    • 可以想象,计算机可以处理的位越多,它可以查找的地址越长,因此一次可以管理的内存就越多.

32位v.64位寻址

  • 对于不灵活(固定)的数字位数(例如2位十进制数字),您可以表示的可能数字称为范围(例如00到99或100个唯一数字).添加额外的十进制数字会将范围乘以10(例如,3个十进制数字 - > 000到999,或1000个唯一数字).
  • 这也适用于计算机,但由于它们是二进制机器而不是十进制机器,因此添加额外的二进制数字()只会使范围增加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位计算机的详细信息.对于大多数用户而言,这并不意味着很多,因为浏览网页,查看电子邮件和播放Solitaire等内容都能在32位寻址范围内轻松完成.64位的好处将真正发挥作用的地方是你拥有大量数据的领域,计算机将不得不通过这种方式.数字信号处理,千兆像素摄影和高级3D游戏都是其大量数据处理在64位环境中将获得巨大提升的领域.

  • 极好的答案 (2认同)
  • 这是一个了不起的外行的解释。下次我被问到这个主题时,我肯定会使用这种方法。 (2认同)

Mar*_*wis 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)应用程序的仿真效果非常差.

  • 这个特定问题的答案在于最大的32b数字是:大约40亿.这意味着32位指针有40亿个不同的状态,这意味着我可以指向内存中40亿个不同的字节,转换为4 GB. (3认同)
  • Re 4GB:简单地与2 ^ 32相关.如果您只有32位来存储地址,则仅限于此.让它变慢 - .NET处理**很多引用(地址).涉及参考的所有工作突然有两倍的事情......好吧,它实际上不是线性的,但肯定"更多"要做. (3认同)

Bar*_*own 18

让我告诉你宾维尔的故事,这是一个偏僻的小镇.宾维尔有一条通向它的道路.每个来到或离开宾维尔的人都必须在这条路上开车.但当你走近小镇时,有一个叉子.你可以左转或右转.

事实上,每条道路都有一个叉子,除了通往房屋的道路.那些道路只是在房子里结束了.没有一条道路有名字; 由于Binville计划委员会创建了一个巧妙的解决方案,他们不需要名字.这是Binville的地图,显示了道路和房屋:

              ------- []  00
             /
       ------
      /      \
     /        ------- []  01
-----
     \        ------- []  10
      \      /
       ------
             \
              ------- []  11
Run Code Online (Sandbox Code Playgroud)

如您所见,每个房子都有一个两位数的地址.只有那个地址足以a)唯一地标识每个房子(没有重复)和b)告诉你如何到达那里.你知道,很容易到达城镇.每个前叉都标有零或一个,计划委员会称之为Binville交叉跟踪器,或简称为bit.当您接近第一个分支时,请查看地址的第一位.如果它是零,则向左走; 如果它是一个,那就走吧.当你到达第二个叉子时,看第二个数字,适当地向左或向右移动.

假设您想要拜访住在宾维尔的朋友.她说她住在10号房子里.当你到达宾维尔的第一个叉子时,向右走(1).然后在第二个叉子,向左(0).你在那儿!

宾维尔已经存在了好几年了,但是这个词已经开始了解其田园诗般的环境,优秀的公园系统和慷慨的医疗保健.(毕竟,如果你不需要在路牌上花钱,你可以用更好的东西.)但是有一个问题.只有两位,寻址方案仅限于四个房屋!

因此,计划委员会将他们的头脑放在一起并提出了一个计划:他们会在每个地址上添加一些,从而使房屋数量翻倍.为了实施该计划,他们将在城镇边缘建立一个新的分支,每个人都会得到新的地址.这是新地图,展示了通往城镇的新叉子和宾维尔的新部分:

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

您是否注意到Binville原始部分中的每个人只是在他们的地址前面添加了零?新位表示构建的新交叉点.当位数增加1时,地址数量增加一倍.市民们总是知道他们城镇的最大规模:他们所要做的就是计算两个上升到比特数的值.有三位,他们可以有2 3 = 8个房子.

几年过去了,宾维尔又一次满负荷运转.越来越多的人想搬进来,所以又增加了一点(连同必要的十字路口),将城镇的面积扩大到十六间.然后是另一个,另一个,另一个...... Binville的地址很快就达到了16位,能够容纳多达2 16(16,384)个房屋,但这还不够.人们不停地来来往往!

因此,计划委员会决定一劳永逸地解决问题:他们会一直跳到32位.拥有超过40亿个家庭(2 32)的足够地址,当然这就足够了!

这是......大约二十五年,当时宾维尔不再是一个不知名的小镇.它现在是一个主要的大都市.事实上,它已经变得像拥有数十亿居民的整个国家一样大.但公园仍然很好,每个人都有很好的医疗保健,所以人口不断增长.

面对不断增长的人口,计划委员会再次集思广益,并提出另一个城市的扩张.这次他们会使用64位.你知道现在Binville市区内有多少房子可以容纳吗?那是对的:18,446,744,073,709,551,616.这个数字是如此之大,我们可以填充大约20亿个地球,并给每个人自己的地址.

使用64位并不是解决所有问题的灵丹妙药.地址占用的空间是旧32位地址的两倍.更糟糕的是,一些公民尚未更新他们的地址以使用新的64位格式,因此他们被迫进入城市的围墙部分专门为那些仍在使用32位地址的人保留.但这没关系:使用32位的人可以访问足够的城市以满足他们的需求.他们觉得还没有必要改变.

64位是否足够?谁知道此时,但宾维尔市民正在等待128位地址的公布......