# c++ 寄存器 缓存 cpu 内存之间的关系

### CPU内部结构与寄存器(了解)

`cpu`  >  `寄存器`  >  `缓存`  >  `内存`

![1](https://cdn.hashnode.com/res/hashnode/image/upload/v1653445638529/vFadP7zzH.png)

#### `64位`和`32位`系统`区别`

- `寄存器`是CPU内部`最基本`的存储单元

- `CPU`对外是通过`总线(地址、控制、数据)`来和外部设备交互的，`总线的宽度是8位`，同时C`PU的寄存器也是8位`，那么这个CPU就叫`8位CPU`

- 如果`总线是32位`，`寄存器也是32位的`，那么这个CPU就是`32位CPU`

- 有一种CPU内部的`寄存器是32位`的，但`总线是16位`，`准32为CPU`

- `所有的64位CPU兼容32位的指令`，`32位要兼容16位的指令`，所以`在64位的CPU上是可以识别32位的指令`
- 在`64位的CPU构架`上运行了`64位的软件操作系统`，那么这个系统是`64位`

- 在`64位的CPU构架`上，运行了`32位的软件操作系统`，那么这个系统就是`32位`
- `64位`的软件`不能运行`在`32位的CPU`之上

#### 寄存器名字(了解)

| 8位  | **16**位 | **32**位 | **64**位 |
| ---- | -------- | -------- | -------- |
| A    | AX       | EAX      | RAX      |
| B    | BX       | EBX      | RBX      |
| C    | CX       | ECX      | RCX      |
| D    | DX       | EDX      | RDX      |

#### `寄存器`、`缓存`、`内存`三者关系

按与CPU远近来分，`离得最近的是寄存器`，然后`缓存(CPU缓存)`，最后`内存`。

CPU计算时，先`预先`把要用的`数据从硬盘读到内存`，然后再把`即将要用的数据读到寄存器`。于是 `CPU<--->寄存器<--->内存`，这就是它们之间的`信息交换`。

那为什么有`缓存`呢？因为如果`经常操作内存中的同一址地的数据`，就会`影响速度`。于是就在`寄存器与内存`之间`设置一个缓存`。

因为`从缓存提取的速度远高于内存`。当然`缓存的价格肯定远远高于内存`，`不然`的话，机器里就没有内存的存在。

由此可以看出，从远近来看：`CPU〈---〉寄存器〈---> 缓存 <---> 内存`。
