1. 寄存器和内存的区别

1.1 寄存器

寄存器是中央处理器内的组成部份, 也就是寄存器在CPU内部

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。

在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

1.2 内存

内存既专业名上的内存储器,内存是由内存芯片、电路板、金手指等部分组成的。它包涵的范围也很大,一般分为只读存储器和随即存储器,以及最强悍的高速缓冲存储器(CACHE)。

只读存储器应用广泛,它通常是一块在硬件上集成的可读芯片,作用是识别与控制硬件,它的特点是只可读取,不能写入。

随机存储器的特点是可读可写,断电后一切数据都消失,我们所说的内存条就是指它了。它也只是存储器中的沧海一粟,是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。

计算机的存储层次(memoryhierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。

1.3 距离不同

距离不是主要因素,但是最好懂。

内存离CPU比较远,所以消费更长的时间储存。

以3Ghz的CPU为例子,电流每秒可以震荡30亿次,每次耗时大概为0.33纳秒,光在1纳秒里可以前进30cm,也就是说一个CPU周期内,光可以前进10cm。因此如果内存距离CPU超过5cm,就不可能在一个时钟周期内完成数据的读写。

这还没考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来会快一点。

1.4 硬件设计不同

苹果公司新推出的iphone5s,CPU是A7,寄存器有6000多位(31个64位寄存器,加上32个128位寄存器)。而iphone5s的内存是1GB,约为80亿位(bit)。这意味着高性能、高成本、高耗电的设计可以用在寄存器上,反正只有6000多位,而不能用在内存上,因为每个位的成本和耗能只要增加一点点,就会被放大80亿倍。

事实上确实如此,内存的设计相对简单,每个位就是一个电容和一个晶体管,而寄存器的设计则完全不同,多出好几个电子元件。并且通电后,寄存器的晶体管一直有电,而内存的晶体管只有在用到的才有电,没用到的就没电,这样利于省电。这些设计上的因素,决定了寄存器比内存读取速度更快。

1.5 工作方式不同

寄存器的工作方式只有2步:(1)找到相关的位(2)读取这些位

内存的工作方式就复杂多:

(1)找到数据的指针(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)

(2)将指针送往内存管理单元(MMU),由MMU讲虚拟的内存地址翻译成实际的物理地址。

(3)将物理地址送往内存控制器(memorycontroller),由于内存控制器找出该地址在哪一根内存插槽(bank)上。

(4)确定数据在哪一个内存块(chunk)上,从该块读取数据。

(5)内存先送回内存控制器,再送回CPU,然后开始使用。

内存的工作流程比寄存器多出许多步,每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。

为了缓解寄存器和内存之间速度的巨大差异,硬件设计师做出了许多努力,包括CPU内部设置缓存,优化CPU工作方式,尽量一次从内存读取指令所要用到的全部数据等等。

Geek05 学习记录相关推荐

  1. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  2. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  3. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  4. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  5. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  6. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  7. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  8. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

  9. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

最新文章

  1. DATEIF实例说明6
  2. 有效数据外含有额外数据_basemap之地图上画额外数据
  3. node.js实现图片上传(包含缩略图)
  4. 网络编程 - 异步调用
  5. 职高学的计算机单招考试能换专业吗,2020年湖南中专生单招考大专能换专业吗?...
  6. 安卓三维展示源码_手机(安卓)自动化脚本开发线上培训
  7. AjaxPro怎么用
  8. eazy ui 复选框单选_UI备忘单:单选按钮,复选框和其他选择器
  9. 前端学习(3074):vue+element今日头条管理-删除文章处理完成
  10. Razor 视图引擎学习
  11. 利用机器学习的排名模型,提升你在英雄联盟的排名
  12. mybatis #与$区别
  13. html 滚动条设置透明,iframe 透明 改变iframe滚动条..设置透明
  14. 【Photoshop】常用快捷键记录—持续记录
  15. Java imageio底层_java - Java中的ImageIO问题 - 堆栈内存溢出
  16. 文本预处理库spaCy的基本使用(快速入门)
  17. opencv和magick两个图像处理库的使用心得
  18. 《动态规划》— 动态规划分类
  19. 《悟透JavaScript》之 甘露模型二
  20. 【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)

热门文章

  1. 奇梦达何以“贱卖”西安研发中心
  2. torchnet.meter使用教程
  3. 计算机win e怎么按,win7电脑中的Win+E组合键无法使用怎么办?
  4. [图]实习月薪超过$7000 Glassdoor发布最新实习生工资报告
  5. 教你把gps服务器修改为中国加速搜星,手机导航-GPS搜星速度优化(android手机)...
  6. ngx.print与ngx.say
  7. Apache NiFi系统管理员指南 [ 一 ]
  8. Naver 三方登录
  9. 快嘴雅虎通群发 官方
  10. 和程序员约会的十个理由