现在的电脑几乎都是64位的,在我小学的时候,大家都是清一色的32位电脑。
我记得我的第一台电脑是三年级的时候,当时我的电脑内存是2g的,cpu是什么型号不记得了,显卡还是集显。
总之很垃圾就是了,而当时喜欢打很多网游,什么CF、qq飞车、lol这些,刚买来还是能玩的,但是电脑用了一年之后,卡的不行。
身为网瘾少年,这怎么能忍,于是百度电脑卡怎么办,多数回答都是换显卡和扩展内存条。
为了玩游戏流畅,跑到电脑店问显卡和内存条多少钱,老板看我是小学生一顿忽悠,介绍了好多,说打游戏不卡。
当时也不懂型号,内存只知道越大越好,不过钱包不允许- -,问老板最便宜的显卡也要四百多。
于是私下存钱,这期间也在百度了解怎么安装显卡和内存条,过了一个多月,终于存够了钱,兴致冲冲买了一个显卡和内存条,你永远不知道当时为了打游戏有多拼。
那个显卡型号现在还记得是Ge210,在现在属于古董中的古董,显卡连散热风扇都没有,上面是一片片散热片,内存买的是一根4g的。
问题来了,当时看了很多教程介绍显卡和内存条的位置,但是tmd,机箱怎么打开啊?
没错,你没看错,当时为了打开机箱都折腾了好久。机箱后面一堆插口,我以为是把后面这块板拿下来,怼了边上的铆钉半天,死活打不开。
后来发现是把机箱侧面的那块盖子往后滑出来。没想到最难的一步是打开机箱哈哈,后面就简单了,内存条和显卡都是插到插槽里就好了。
装完之后赶紧开机,二话不说把游戏打开,卧槽,真的丝滑,瞬间感觉换了台电脑,现在还记得那种快乐。
当时鲁大师这个软件还是很流行的,看了自己的配置识别,显卡显示没问题。
但是,内存怎么只显示4g??? 我原本是2g内存条,加了一根4g。
2+4不是等于6?
当时还以为被奸商坑了,不过打游戏不卡,也就把这件事忘了。
现在回想起来,其实当时用的是32位的xp系统,内存最高只能识别4g。
现如今早已明白了这背后的原理,却找不回童年的快乐。(突然伤感哈哈)
为什么32位系统最多只能识别4g内存?
在回答这个问题之前你需要对计算机的构造有个大致了解。
内存
众所周知,程序要运行起来,首先需要从硬盘加载到内存,我们的程序和数据都是存储在内存,存储区域是线性的。
数据存储的单位是一个二进制位(bit),即0或1。最小的存储单位是字节(byte),1字节等于8位。
而内存的地址是从0开始编号的,然后自增排列,最后一个地址为内存总字节数减1,这种结构其实就是数组的物理表现形式。
这也就是为什么数组比链表访问速度快,因为数组在物理上天然支持随机访问,访问数组的每个元素的速度都是一样的。
CPU
CPU也就是中央处理器,我们常说的32位和64位其实区别就是cpu一次能计算多少字节数据。
- 32位CPU一次可以计算4个字节
- 64位CPU一次可以计算8个字节
为什么CPU要分多少位,其实是为了能计算更大的数值,8位的CPU一次只能计算0~255范围内的数值,假如要计算500*666,一次运算是完成不了的。
于是为了能一次计算大数运算,CPU就需要多个byte一起计算。
所以,CPU的位越大,一次能计算的数值范围就越大。32位的CPU最大能计算的数为4294967295,也就是2的32次方。
而CPU内部除了运算单元和控制单元,还有寄存器,其实功能和内存本质上是一样的。
那么问题来了,那既然功能一样,还要寄存器何用
其实原因既简单又无奈,内存距离CPU还是太远了,寄存器就在CPU里面,紧紧挨着运算单元,速度当然快。
寄存器的种类:
- 通用寄存器:存放需要进行运算的数据,例如要进行加法的两个数据
- 程序计数器:存放CPU要执行的下一条指令的所在的内存地址,注意哦,存的是指令的位置,而不是指令本身。
- 指令寄存器:存放程序计数器指向的指令,也就是指令本身。
总线
那有了CPU和内存还有其他输入输出设备之后,它们之间怎么沟通啊,怎么传输数据。
依靠总线,总线分3种:
- 地址总线:指定CPU将要操作的内存地址
- 数据总线:读写内存的数据
- 控制总线:用于发送和接受信号,比如中断、设备复位等信号,CPU收到控制信号后进行响应
而CPU读取数据的过程其实就是通过两个总线传输,首先通过「地址总线」来指定要访问的数据地址,在通过「数据总线」来传输数据。
输入输出设备
输入设备常见的就是键盘鼠标这些,把数据传给计算机。
而输出设备就是显示器,负责显示运算结果。
位宽
数据怎么传输的?因为最底层都是二进制表示的,所以其实通过电压的高低就能表示数据。低电压表示0,高电压表示1。
有了表示数据的方法,那怎么传?也就是传输策略。
5这个数的二进制是101,如果只有一条线路,每次只能传1位(bit)数据,那传101这个数据,还得传三次才行,效率太低。
这样一位一位传的方式,称为串行,下一个bit需要等待上一个bit传输完成才能传。
那想一次传多点也简单啊,多加几根线呗,一次传多个bit,也就称为并行传输。
为了避免低效率的串行传输方式,线路的位宽最好一次就能访问到所有的内存地址。
CPU想操作内存地址就需要地址总线,如果地址总线只有1条,那每次只能表示0或1这个地址,而CPU一次只能操作2个内存地址。
想要操作4G的内存就需要32条地址总线,2^32=4G。所以32位的CPU最多只能操作4G内存,也就是只能识别4G。
CPU位宽和内存同理,CPU并不是一定要32位,但为了与总线匹配,最好相同,这样32位的CPU操作32位宽的线路,一次能操作的数据正好匹配,不多不少。
回答最初的问题
假设32位的CPU要计算两个64位大小的数字之和,就需要把每个数字拆成2份32位数字,一份高位,一份低位。两个数字各自先低位相加并进位再高位相加。
所以32位的CPU是不能一次计算出两个64位数字的运算的,而直接用64位CPU就能一次算出结果。
但是这并不代表64位CPU性能一定比32位高很多,其实32位能表示的数已经很大了,很多应用不会运算超过32位的数字,在进行不超过32位运算的情况下,32位与64位速度差别不大。
但有一个致命问题就是32位CPU只能操作4G内存,你装了超出4G的内存也没用。
而64位就不一样了,它的寻址范围非常大,2的64次方可以说是天文数字了。
评论区