计算机的存储层次之中,寄存器最快,内存其次,最慢的是硬盘。
同样是晶体管存储设备,为什么寄存器比内存快呢?
原因一:距离不同
距离不是主要因素,但是最好懂,所以要放在前面说。内存距离CPU比较远,所以要耗费更长时间读取。
以3Ghz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时约0.33纳秒。光在1纳秒的时间内,可以前进30厘米。也就是说,在CPU的一个时钟周期内,光可以前进10厘米。因此如果内存距离CPU超过5厘米,就不能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来快一点。
(之所以是5厘米,是因为要计算的是往返的路程。)
原因二:硬件设计不同
苹果公司推出的iPhone5S,CPU是A7,寄存器有6000多位(31个64位寄存器,加上32个128位寄存器)。而iPhone5S内存是1GB,约为80亿位(bit)。这意味着,高性能、高成本、高耗电的设计可以用在寄存器上,反正只有6000多位,而不能用在内存上。
原因三:工作方式不同
寄存器的工作方式比较简单,只有两步:
- 找到相关的位
- 读取这些位
内存的工作方式就比较复杂了:
(1) 找到数据指针。(指针可能存放在寄存器内,所以这一步就已经包括了寄存器的全部工作了。)
(2) 将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址翻译成实际的物理地址。
(3)将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽上。
(4)确定数据在哪一个内存块上,从该块读取数据。
(5)数据先送回内存控制器,再送回CPU,然后开始使用。