我是编程新手,没有计算机科学背景(没有正式学位)。我主要使用 C# 编写 winform 程序。

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

我尝试阅读一些计算机组织和体系结构书籍。但是,要么是我太笨,无法理解其中写的内容,要么是作者假设读者有一定的计算机科学背景。

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

编辑: 我读过类似在 32 位模式下,它们可以访问高达 4GB 内存;在 64 位模式下,他们可以访问更多...我想知道为什么要进行所有这些操作。

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

有帮助吗?

解决方案

这真的一切都归结到电线。

在数字电路中,只有0和1的(通常是低电压和高电压)可以由一个元件(CPU)到另一元件(存储器芯片)来发送。如果我只有1线,我只能发送或者是1或0以上每个时钟周期的丝。这意味着我只能寻址2个字节(假定字节寻址,并且整个地址在只是1个循环速度传递!)。

如果我有2条线,我可以解决4个字节。因为我可以发送:(0,0),(0,1),(1,0)或(1,1)在两个导线。因此,基本上它是2至导线#2的功率。

所以,如果我有32根电线,我可以解决4 GB,如果我有64根电线,我可以解决多很多。

有其他的技巧工程师可以做处理更大的地址空间大于导线允许。例如。分裂了地址分为两个部分,并在下一个周期中发送的第一个周期的一半和另一半。但是,这意味着你的内存接口将有一半为快。

编辑我的意见到这里(未经编辑)),并且使得维基如果任何人有什么有趣的补充,以及

像其他意见已提到的,2 ^ 32(2的32次幂)= 4294967296,其是4 GB。和2 ^ 64是18,446,744,073,709,551,616。为了进一步挖掘(你可能在亨纳和帕特森阅读本)处理器包含了它使用的“临时空间”存储其计算的结果寄存器。仅CPU知道怎么做简单的算术,并且知道如何来移动数据。自然地,这些寄存器的大小是在比特相同的宽度为“#-Bits”架构的是,这样一个32位CPU的寄存器将是32位宽,和64位CPU的寄存器将是64比特宽。

有将例外,当涉及到浮点(处理双精度)或其它SIMD指令(单指令多数据指令)。的CPU负载和数据保存到和从主存储器(RAM中)。由于CPU也使用这些寄存器来计算存储器地址(物理和虚拟的),存储器,它可以解决的量也相同,其寄存器的宽度。有一些的CPU来处理地址计算有特殊扩展寄存器,但那些“后的想法”我会打电话添加后的工程师意识到他们所需要的。

目前的64位是相当多的用于寻址真实物理内存。当涉及到CPU到内存连接最多由于实用性大多数64位CPU将省略不少电线。它不会是有意义的使用了宝贵的主板房地产运行线,将永远有0。不要为了有今天的DIMM密度RAM最大数额将需要4个十亿个DIMM插槽,提及:)

除的存储器的增加量,64位处理器提供整数大于2 ^ 32更大更快的计算。先前程序员(或编译器,它也由程序员编程;)将具有通过取两个32位寄存器和处理任何溢出的情况下,以模拟具有一个64位的寄存器。但在64位的CPU,将通过CPU本身进行处理。

的缺点是,一个64位CPU(具有一切相等)将消耗更多的功率比32位CPU只是由于(粗略地)需要两倍的电路数量。然而,在现实中你永远不会得到平等的比较,因为新的CPU将有更少的功率泄漏新的硅工艺制造,让您补习班在同一裸片尺寸更电路等,但64位架构将消耗两倍记忆。曾经被认为86的可变长度指令的“丑陋”实际上是现在相比架构的优点,即使用固定指令的大小。

其他提示

让我们试图回答这个问题通过查看 计算机;希望这将揭示一些你的东西:

要记住的事情

  • 作为惊人,因为他们,计算机都是非常非常愚蠢的。

存储器

  • 人们存储器(除,可以说,丈夫和政治家。) 人们存储的信息,在他们的记忆,供以后使用。
    • 有一个问题(e。g,"什么是你的电话号码吗?") 一个人能够检索信息,得到一个答案(例如,"867-5309")
  • 所有的现代计算机存储器,并存储的信息,在他们的记忆,供以后使用。
    • 因为电脑是哑,他们只能问一个非常具体的问题,检索信息:"有什么价值 X 在你的记忆?"
      • 在这个问题上, X 被称为 地址, ,这也可以被称为 指针.

所以这里我们有一个根本区别之间的人员和计算机:回顾信息存储器、计算机需要给予一个 地址, 而人们不这样做。(以及在某种意义上可以说"你电话号码"是一个地址,因为它提供了不同的信息比"你的生日",但这是另一个对话。)

号码

  • 人们使用 小数系统.这意味着每位在一个小数量,该数字可能是一个0, 1, 2, 3, 4, 5, 6, 7, 8, 或9。人们 十个 选项每位。
  • 所有的现代计算机的使用 二进制数字系统.这意味着每位数中的二进制数字,该数字只能有1或0.计算机都有 两个 选项每位。
    • 在计算机的术语,一个单一的二进制数字被称为 , 短为 binary挖它的.

地址

  • 每一个地址在一个计算机是二进制数字。
  • 每一个地址在一个计算机具有最大数量的数字(或多位),它可以拥有。这主要是因为计算机硬件是不灵活的(也称为 固定),并需要提前知道一个地址将只能这么长时间。
  • 像"的32位"和"64位"是谈论最长的地址为其一个计算机可以存储和检索信息。在英文"的32位"在这个意义上说意味着"这个电脑希望说明关于其存有地址不超过32二进制数字长。"
    • 你可以想象,更多的位的计算机能够处理较长的地址就可以看一下,因此更多的存储器可以管理的一段时间。

32-bit 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位的计算机。对于大多数用户,这真的不意味着一个整体很多,因为事情就像在浏览的网页,查看电子邮件和打纸牌所有舒适的工作范围内的32位处理的问题。其中的64位获益会很闪耀的是在区域中有很多数据的计算机将有改动通过。数字信号处理,千兆像素摄影和先进的3D游戏是所有地区,在那里他们的大量数据处理会看到一个大的推动在64位的环境。

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)应用模拟很差显著不同。

让我告诉你Binville,一个小镇在荒郊野外的故事。 Binville有一个通往它。每个人无论是来或离开Binville只好把车在这条路上。但是当你走近镇,有一个岔路口。你可以去任何向左或向右走。

其实,每路在它有一个岔路口,除了导致对房屋本身的道路。这些道路只是在家里结束。道路都没有名称;他们并不需要感谢的名字由Binville计委创造了一个巧妙的解决方案。这里的地图Binville的,表示道路和房屋:

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

可以看到的,每个房子有一个两位数地址。这本身地址是不够的)唯一地识别每个房子(没有重复)和b)告诉你如何到达那里。这是容易得到解决城镇,你看。每个叉标记有0或1,其中规划委员会调用Binville交叉口示踪剂,或作为短。当你接近第一个岔路口,看这个地址的第一位。如果它是一个零,去左边;如果它是一个向右走。再看看第二个数字,当你到了第二叉,会向左或向右合适。

让我们假设你想访问你的朋友谁住在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 3 = 8楼的房屋。

几年过去了,Binville再次座无虚席。越来越多的人希望在移动,因此(连同所需的交点)加入另一位镇的规模扩大一倍到十六房屋。然后另一位,另外,和另一... Binville的地址,很快就在十六位,能容纳2 16 (16,384)的房子,但它是不够的。人们不断涌现和未来!

所以规划委员会决定一劳永逸地解决这个问题:他们将一路跳到32位。随着超过四十亿家园(2 32 ),当然这将是足够的!足够的地址

和它是......大约25年,当Binville不再在一个偏僻的小镇。它现在是一个主要的大都市。事实上,它越来越成为大如十亿居民的整个国家。但公园仍不错,每个人都有巨大的医疗保健,因此人口不断增长。

面对人口不断增加,计划委员会再次把他们集思广益,提出了另一个城市的扩张。这一次,他们将使用64位。你知道有多少家庭可以在Binville市区范围内适合呢?这是正确的:18,446,744,073,709,551,616。这个数字是如此之大,我们可以填充约两十亿地球,并给每个人自己的地址。

使用64位不是他们所有的寻址问题的万灵药。该地址需要两倍的空间写为旧32位地址一样。更糟的是,一些市民还没有更新他们使用新的64位地址格式,所以他们被迫进入专门为那些仍然使用32位地址,保留城市的围墙关闭部分。但是,这是确定的:使用32位的人曾获得足够多的城市更适合他们的需要。他们觉得没必要改变,只是还没有。

将64位就够了吗?谁知道在这个时候,但Binville的公民都在等待的128位地址的公告...

马丁的答案是正确的大多是和详细。

我想我刚提到,所有的内存限制是每个应用程序的虚拟存储器限制,而不是在计算机中实际物理内存的限制。事实上,它可能比的,即使在32位系统中单个应用程序的内存4GB以上的工作,它只是需要更多的工作,因为它不能一次全部是使用指针访问。 链接文本

这没有提到另一件事是,传统的x86处理器和x86-64之间的差异不仅在指针大小,而且在指令集。虽然指针是较大的和消耗更多的存储器(8个字节,而不是4)它是由较大的寄存器组补偿(15个通用寄存器,而不是如图8所示,这个),因此性能实际上可以为代码,不会计算工作更好。

马丁的答案是优秀的。我想补充一些其他点......既然你提到的.NET,你应该注意的是,CLI / JIT有x86和x64之间的一些差异,不同的优化(尾调用,例如),以及先进的一些微妙的不同的行为之类的东西volatile。这都对你的代码产生影响。

此外,并非所有的代码工作在x64。使用的 DirectX或某些COM特征可能很难任何东西。不是一个真正的的性能的功能,但要知道重要的。

(我删除“的DirectX” - 我可能是胡说八道那里......但是简单地说:你需要检查什么,你取决于你的目标平台上稳定)

想的通用计算机存储器作为海量宾果卡十亿平方的。为了解决在电路板上的任何个体正方形有标记每个行和列B-5的方案,I-12,O型52..etc。

如果有卡上有足够的正方形最终你会用完的信件,所以你需要开始重新使用更多的字母,写较大的数字继续能够唯一地解决每平方米。

在你知道它的播音员被喷出烦人庞大的数字和字母组合,让你知道你的10十亿方证上标注该广场。 BAZC500000,IAAA12000000,OAAAAAA523111221

的计算机的比特数指定其的字母和数字的复杂性,以解决任何特定方的限制。

32位意味着如果该卡是任何大于2 ^ 32平方计算机没有足够的导线和transisters以允许其唯一物理地址来读取值或写一个新值到指定所需的任何特定方存储器位置中。

64位计算机可以单独解决大规模的2 ^ 64个方格..但这样做的每平方米需要更多的字母和数字,以确保每一方都有自己独特的地址。这就是为什么64位计算机需要更多的存储器。

的寻址限制

其他常见的例子是本地电话号码。他们通常游戏7位数111-2222或重新格式化为一个号码1112222 ..当有超过9,999,999人谁希望自己的telelphone数字会发生什么?你加区号和国家代码和电话号码从7位数字变为10至11占用更多的空间。

如果您熟悉即将IPv4的不足其同样的问题.. IPv4地址是32位,这意味着有2 ^ 32(约4十亿)唯一的IP地址可能和有更多的人比活着的今天

有是开销我所提到的所有方案(计算机,电话号码,IPv4地址),其中某些部分被保留用于组织目的,因此可使用的空间要少得多。

为64位世界的性能承诺是,而不是在时间(ABCD)发送4个字节的64位的计算机可以在一个时间(ABCDEFGH)发送8个字节,因此字母表的存储器不同区域之间转移高达两倍快32位计算机。另外也受益,只是运行速度更快,当他们有更多的内存,他们可以使用一些应用程序。

在由英特尔等人在现实世界的64位桌面处理器并不是真的64位处理器,并且仍然被限制为32位为几种类型的操作,从而在现实世界中的32位和64之间的性能位应用程序是微不足道的。 64位模式为您提供更多的硬件寄存器与工作不提高性能,但在“假”的64位处理器adressing更多的内存也可以影响性能在某些方面因此它后容易清洗。在未来我们将看到更多的性能提升,当台式机处理器成为完全的64位。

我不认为我已经看到了很多在以前的答案的单词“注册”的。数字计算机是一堆寄存器,具有用于算术和存储器来存储数据和程序的逻辑。

但首先...数字计算机使用数字的二进制表示,因为二进制数字(“位”)在0和1很容易被两个状态表示(ON / OFF)的开关的。早期的计算机使用的机电开关;现代计算机使用的晶体管,因为他们是更小,更快。的许多更小,和更快。

在CPU内部,开关在有限长度的寄存器组合在一起,和操作是在整个寄存器通常执行:例如,该寄存器补充,等等。正如你所期望的,32位CPU具有寄存器32位长。我在这里简化,但我承担。

是有意义的组织计算机存储器作为一系列的“位置”,每个保持相同数目的比特作为一个CPU寄存器:例如,加载从该内存位置该寄存器。实际上,如果我们认为的存储器中作为字节,这是一个寄存器的只是方便分数,我们migh从一系列存储器位置加载的寄存器(1,2,4,8)

随着晶体管更小,对于更复杂的算术附加的逻辑可以在计算机芯片的有限空间来实现。 CPU地产的总是是在一个溢价。

但是,随着芯片制造的改进,更多的晶体管能可靠地上仅略微更大的芯片制成。寄存器可以更长并且将它们之间的路径可以更宽。

当其中容纳的存储器单元的地址寄存器较长,它们处理更大的存储器和数据可以在更大的块进行操作。与更复杂的算术逻辑组合,事情就更快地完成。

和这不正是我们的所有的后?

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

最大可访问的存储器空间= 2 名词字节,其中n是该体系结构的字长度。因此,在一个32位结构体系,最大可访问的存储器空间是2 32 = 4294967296 = 4GB的RAM。

64位体系结构将能够访问2 64 =的存储器网。

只注意到Tchens意见去了这一点。不管怎么说,没有一个CS的背景,是计算机组织与建筑的书籍都将是困难的最好理解。

  • 该处理器使用的基-2储存的数字。基地2个可能的选择,因为它是"简单"的所有基地:例如基-2乘法表只有4个细胞,同时基地"10"乘法表有100个细胞。
  • 2003年以前,普通的电脑处理器是唯一"的32位的能力".
    • 这意味着处理器的母数字的行动是为32位数字。
    • 你仍然可以做到数字操作,对于较大的数字,但是那些将要执行的方案执行的处理,而不是"原始的行动"(命令在机语)支持通过处理像那些为32位整数(当时)
    • 32位的选择,因为CPU工程师都喜欢权力的2,16位还不够
  • 为什么不是16位的足够了吗?有16位你可以代表整数范围在0到65535
    • 65535 = 1111111111111111 在二元(=20+21+22...+215 = 216-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位模式"。然后它可以用伟大的新CPU64位的能力。
  • 因此,对于程序使用的CPU的64位的能力:CPU,操作系统和程序,所有具有"支持的64位"。
  • 64位就足以给世界上的每一个人几个独特的号码。它可能是个足够大对于目前大多数计算的努力。它可能是不可能的,未来的Cpu将进一步转向为128位。但是,如果他们这样做,这肯定足以为一切我可以想象,因此有256位的过渡不是必要的。

我希望这有所帮助。

值得注意的是,某些应用程序(例如多媒体编码/解码和渲染)在编写以充分利用 64 位时,性能将显着提升 (2 倍)。

请参阅 32 位与 32 位64 位基准测试 乌班图视窗Vista

有关非CS的人。 64将工作进行计算更好的(各种),这将是很好也将让你有更多的RAM。

此外,如果你有有限的RAM(在VPS例如或小-RAM专用服务器) - 。选择32位,服务将有少吃RAM

这是一个非常简单的解释,考虑到上述的一切是相当详细的

32位指的是寄存器。寄存器是地方来存储数据,并且所有的程序通过操纵这些东西进行操作。组件直接操作它们(以及因此为什么人往往兴奋在组件程序)。

32位装置的基本组寄存器能容纳32位ofinformation。 64位的装置,勿庸置疑,64个比特信息的

这个

为什么可以使程序速度更快?因为你可以做更大的操作变得更快。它只会使某些类型的程序更快,顺便说一句。游戏,通常,可以采用每个处理器优化 ,因为它们的数学重操作(且因此寄存器使用)具有极大的优势。

但有趣的是,作为陈郁秀提到的,他们有很多其他的“东西”,让你无论如何执行规模较大的行动。 SSE,SSE2,等等,将有64位寄存器和128位寄存器,即使是在'32比特”系统。

,以解决存储器的增加的能力直接说,以增加基本寄存器大小,基于(I想象)Windows的特定存储器寻址系统。

希望有所帮助一点。其他海报比我更准确,我只是试图解释非常简单的(它有助于我了解得很少:)

我对这个问题的一个精彩的回答,但并不都在这个答案块适合....简单的答案是,你的程序得到一个字节的内存不足,它需要一个地址。在32位的CPU,每个字节的存储器地址被存储在32位(无符号)的整数,其为4 GB的最大值。当使用64位处理器,存储器地址是一个64位整数,其提供了有关1.84467441×10 ^ 19个可能的存储器地址。这,如果你是新的节目真的应该足够了。你真的应该更注重学习如何编程,比你的处理器的内部工作,为什么你不能访问超过4 GB的RAM的32位CPU上。

简单的答案解释可寻址存储器范围内具有32位处理器是:

让我们假设你只有3允许构建u能去高达所以最大数位数字是数字的999范围是(0 - 999)。你刚才1000个号码使用。

但是,如果u都不允许有6位数字,那么您可以构建的最大数量是999999。现在的范围是(0 - 999999)。所以,现在ü有1首万个号码与您使用。

同样多个比特你被允许在具有处理器,更大的一组地址(在以前的实施例编号)可以构造和最终使用来存储数据的等

什么比这更简单的将有趣的阅读!

-AD。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top