我是新来的节目和来自非CS背景(无正式学位)。 我使用C#程序大多的WinForms。
我感到困惑32位和64位....我的意思是,听说过32位操作系统,32位处理器和基于其上的程序可具有最大内存。 它是如何影响程序的速度。 还有很多更该保持未来在脑海中的问题。
我试图去通过一些计算机组织与结构的书籍。 但是,无论是我太笨明白什么是写在那里或作家假定读者有一定的CS背景。
有人可以解释我这些东西在一个普通的简单的英语或点我一些东西,做到这一点。
编辑:我已阅读之类的东西在32位模式下,他们可以访问高达4GB内存; 在64位模式下,他们可以访问更多更多....我想知道为什么所有的这些事情。
BOUNTY:下面的答案是真的很好....马丁尤指。 但是,我在看一个详尽的解释,但在普通的简单的英语。
Answer 1:
这真的一切都归结到电线。
在数字电路中,只有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。 为了进一步挖掘(你可能在亨纳和帕特森阅读本)处理器包含了它使用的“临时空间”存储其计算的结果寄存器。 仅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位架构将消耗两倍记忆。 曾经被认为实际上是一个优势相比,现在使用固定的指令长度架构的x86的可变指令长度的“丑陋”。
Answer 2:
让我们通过观察人们对电脑来回答这个问题; 希望这将弄清事情你一些光:
事情要记住
记忆
- 人们有记忆(例外情况,可以说,丈夫和政治家的)。人们将信息存储在他们的记忆以备后用。
- 随着一个问题(例如,“你的电话号码是什么?”)一个人能够检索信息给一个答案(例如,“867-5309”)
- 所有现代计算机有内存和存储的信息在他们的记忆以备后用。
- 因为电脑是愚蠢的,他们只能被问了一个很具体的问题来获取信息:“什么是X在你的记忆中值”
- 在上面的问题,X被称为一个地址 ,其也可以被称为指针 。
所以在这里我们拥有人与计算机之间的根本区别:从内存召回信息,计算机需要提供的地址 ,而人没有。 (当然在一定意义上可以说“你的电话号码”是一个地址,因为它比“你的生日”不同的信息,但这是另一个谈话。)
数字
- 人们使用十进制数字系统 。 这意味着用于在十进制数的每一位,该位可以是一个0,1,2,3,4,5,6,7,8,或9的人具有每位10级的选项。
- 所有现代计算机使用二进制数字系统 。 这意味着用于在二进制数每个数字,数字只能是1台或0。计算机具有每数字两种选择。
- 在计算机行话,单个二进制数字被称为位 ,简称 inary挖 。
地址
- 在计算机的每个地址是一个二进制数。
- 在计算机中的每个地址具有可以具有数字(或比特)的最大数目。 这主要是因为计算机的硬件不灵活(也被称为固定 ),需要提前一个地址只能这么长知道。
- 像“32位”和“64位”都在谈论计算机可存储和检索信息的最长的地址。 在英语中“32位”在这个意义上是指“这台电脑预计有关其存储的指令有地址的不超过32个二进制位长。”
- 你可以想像,更多的位的计算机可以处理时间越长,可以查找,因此,更多的内存可以同时管理地址。
32位诉64位寻址
启示
这一切都意味着,在64位计算机可以存储和检索比32位计算机的更多信息。 对于大多数用户来说,这并不代表了一大堆东西,因为像浏览网页,收发电子邮件,玩接龙的32位寻址范围内的所有工作无忧。 当64位的好处才会真正出色的地方是在你有很多数据的计算机将有流失通过的区域。 数字信号处理技术,超高画质像素摄影和先进的3D游戏是所有领域,他们的数据处理海量会看到在64位环境中一个巨大的推动。
Answer 3:
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)应用模拟很差显著不同。
Answer 4:
让我告诉你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位地址的公告...
Answer 5:
马丁的答案是正确的大多是和详细。
我以为我会只是提到他所有的内存限制是每个应用程序的虚拟内存的限制,而不是在计算机中的实际物理内存限制。 事实上,它可能比的,即使在32位系统中单个应用程序的内存4GB以上的工作,它只是需要更多的工作,因为它不能一次全部是使用指针访问。 链接文本
这是没有提到另一件事是,传统的x86处理器和x86-64之间的差异不仅在指针大小,而且在指令集。 虽然指针是较大的和消耗更多的存储器(8个字节,而不是4)它是由较大的寄存器组补偿(15个通用寄存器,而不是如图8所示,这个),因此性能实际上可以为代码,不会计算工作更好。
Answer 6:
马丁的答案是优秀的。 我想补充一些其他点......既然你提到的.NET,你应该注意的是,CLI / JIT有x86和x64之间的一些差异,不同的优化(尾调用,例如),以及先进的一些微妙的不同的行为之类的东西volatile
。 这都对你的代码产生影响。
此外,并非所有的代码工作在x64上。 使用DirectX或某些COM功能可能挣扎什么。 不是一个真正的性能特点,但重要的是要知道的。
(我删除“的DirectX” - 我可能是有胡说八道......但是简单地说:你需要检查什么,你依靠稳定的目标平台上)
Answer 7:
想想一个普通的电脑内存为一个巨大的宾果卡数十亿平方的。 为了解决在电路板上的任何个体正方形有标记的方案的每个行和列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位。
Answer 8:
我不认为我已经看到了很多在以前的答案的单词“注册”的。 数字计算机是一堆寄存器,具有用于算术和存储器来存储数据和程序的逻辑。
但第一...数字计算机使用数字的二进制表示,因为二进制数字(“位”)在0和1很容易被两个状态表示(ON / OFF)的开关的。 早期的计算机使用的机电开关; 现代计算机使用的晶体管,因为他们是更小,更快。 小得多 , 快得多 。
在CPU内部,开关在一个有限长度的寄存器组合在一起,和操作是在整个寄存器通常执行:例如,该寄存器补充,等等。 正如你所期望的,32位CPU具有寄存器32位长。 我在这里简化,但我承担。
是有意义的组织计算机存储器作为一系列的“位置”,每个保持相同数目的比特作为一个CPU寄存器:例如,从该存储器位置加载该寄存器。 实际上,如果我们认为的存储器字节 ,这是一个寄存器的只是方便分数,我们migh从一系列存储单元(1,2,4,8)加载的寄存器。
随着晶体管变得更小,对于更复杂的算术附加的逻辑可以在计算机芯片的有限的空间来实现。 CPU房地产始终处于溢价。
但是,随着芯片制造的改进,更多的晶体管能可靠地上仅略微更大的芯片制成。 寄存器可以更长并且将它们之间的路径可以更宽。
当持有的存储器单元的地址寄存器较长,它们处理更大的存储器和数据可以在更大的块进行操作。 在与更复杂的算术逻辑组合,事情更快完成。
而这不正是我们毕竟是?
Answer 9:
解释为什么32位模式只能访问4GB的RAM:
最大访问的存储器空间= 2个n字节,其中n是该体系结构的字长度。 因此,在一个32位结构体系,最大可访问的存储器空间是RAM 2 32 = 4294967296 = 4GB。
64位体系结构将能够访问2 64 =的存储器地段。
只注意到Tchens意见去了这一点。 不管怎么说,没有一个CS的背景,是计算机组织与建筑的书籍都将是困难的最好理解。
Answer 10:
- 处理器使用基数为2的存储号码。 基体2可能是选择是因为它的所有碱基的“简单”:例如基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是绝对不够的。 计算机有比这样更多的内存,如果你在“字节”或位算不要紧
- 32位被认为是足够了一段时间。 在2003年AMD推出的第一个64位的能力的“x86”处理器 。 英特尔紧随其后。
- 其实被认为是16位就够了很久以前 。
- 这是很多硬件和软件是向后兼容的普遍做法。 在这种情况下,它意味着64位功能的CPU也可以运行每个软件的32位功能的CPU可以。
- 向后兼容性争取作为一个业务战略。 更多的用户希望升级到更快的处理器,如果它也可以做的一切以前的一个可能。
- 在CPU的向后兼容性意味着,新的行动CPU支持添加到以前的机器语言。 例如,以前的机器语言可能有一些规范,如“在开始的所有操作码
1111
留作将来使用” - 从理论上讲,因为所有的软件可能只是被重新编译为新的和不兼容的机器语言的这种CPU的向后兼容性不会一直必要的。 然而,这不是因为企业的战略和政治或经济体系的情况。 在乌托邦“开源”的世界里,机器语言的向后兼容性可能不会是一个问题。
- X86-64的向后兼容性(共用64位CPU机器语言)是在一个‘兼容模式’的形式。 这意味着,任何希望使用的新的CPU功能,程序需要通知CPU(通过OS),它应该在“64位模式”运行。 然后,它可以使用到卓越的新CPU的64位功能。
- 因此,对于一个程序使用CPU的64位功能:该CPU,操作系统,程序,都必须“支持64位”。
- 64位足以让每个人在世界上一些独特的数字。 这可能是最当前的计算努力不够大。 这也可能是不太可能,未来的处理器将进一步转移到128位。 但是,如果他们这样做,这是绝对够用的一切,我可以想像,因此一个256位的过渡不会是必要的。
我希望这有帮助。
Answer 11:
值得一提的是写入充分利用64位时,某些应用程序(如多媒体编码/解码和渲染)获得显著(2倍)的性能提升。
请参阅32位与64位基准的Ubuntu和Windows Vista中
Answer 12:
对于非CS的人。 64将工作进行计算更好的(各种),这将是很好也将让您有更多的内存。
此外,如果你只有有限的RAM(在VPS例如或小-RAM专用服务器) - 选择32位,服务会有少吃RAM。
Answer 13:
这是一个很简单的解释,考虑到上述一切工作相当细致。
32位指的是寄存器。 寄存器是地方来存储数据,并且所有的程序通过操纵这些东西进行操作。 大会直接作用于他们(因此为什么人们常常激动组件程序)。
32位装置的基本组寄存器能容纳32位ofinformation。 64位的装置,勿庸置疑,信息的64位。
这是为什么可以使程序速度更快? 因为你可以做更大的操作变得更快。 它只会使某些类型的程序更快,顺便说一句。 游戏,通常情况下,可以占据很大优势,每个处理器优化的,因为他们的数学重操作(因此注册使用)。
但有趣的是,作为陈郁秀提到的,他们有很多其他的“东西”,让您执行规模较大的行动呢。 SSE,SSE2,等等,将有64位寄存器和128位寄存器,即使是在'32比特”系统。
解决内存的能力,增加直接说,以增加基本寄存器大小的基础上,(我想)Windows的特定的内存寻址系统。
希望帮助一点点。 其他海报比我更准确,我只是试图解释非常简单的(它有助于我知道很少:)
Answer 14:
我对这个问题的一个精彩的回答,但并不都在这个答案块适合....简单的答案是,你的程序得到一个字节的内存不足,它需要一个地址。 在32位的CPU,每个字节的存储器地址被存储在32位(无符号)的整数,其为4 GB的最大值。 当使用64位处理器,存储器地址是一个64位整数,其提供了有关1.84467441×10 ^ 19个可能的存储器地址。 这,如果你是新的节目真的应该足够了。 你真的应该更注重学习如何编程,比你的处理器的内部工作,为什么你不能访问超过4 GB的RAM的32位CPU上。
Answer 15:
简单的答案来解释与32位处理器是可寻址内存范围:
让我们假设你只有3允许构成以便最大号数u可以去位数高达数是999范围是(0 - 999)。 你刚才1000个号码使用。
但是,如果u允许有6位数字,那么你可以构建的最大数量为999999。现在的范围是(0 - 999999)。 所以,现在ü有1首万个号码与您使用。
同样多个比特你被允许在具有处理器,更大的一组地址(在以前的实施例编号)可以构造和最终的使用来存储数据等。
任何简单得多,这将有趣的阅读!
-广告。
文章来源: Processor, OS : 32bit, 64 bit