14.变量内存分析.md 2.5 KB
Newer Older
极客江南's avatar
极客江南 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
## 变量内存分析

- 内存模型

+ 内存模型是线性的(有序的)
+ 对于 32 机而言,最大的内存地址是2^32次方bit(4294967296)(4GB)
+ 对于 64 机而言,最大的内存地址是2^64次方bit(18446744073709552000)(171亿GB)

![](https://img-blog.csdnimg.cn/img_convert/c15e330e2723191671e55b27cd9e4f1c.png)

- CPU 读写内存

  + CPU 在运作时要明确三件事

  * 存储单元的地址(地址信息)
  * 器件的选择,读 or 写 (控制信息)
  * 读写的数据 (数据信息)

- 如何明确这三件事情

  + 通过地址总线找到存储单元的地址
  + 通过控制总线发送内存读写指令
  + 通过数据总线传输需要读写的数据

 >   * 地址总线:  地址总线宽度决定了CPU可以访问的物理地址空间(寻址能力)
 >     + 例如: 地址总线的宽度是1位, 那么表示可以访问 0 和 1的内存
 >     + 例如: 地址总线的位数是2位, 那么表示可以访问 00、01、10、11的内存
 >    * 数据总线: 数据总线的位数决定CPU单次通信能交换的信息数量
 >      + 例如: 数据总线:的宽度是1位, 那么一次可以传输1位二进制数据
 >      + 例如: 地址总线的位数是2位,那么一次可以传输2位二进制数据
 >    * 控制总线: 用来传送各种控制信号

- 写入流程
  + CPU 通过地址线将找到地址为 FFFFFFFB 的内存
  + CPU 通过控制线发出内存写入命令,选中存储器芯片,并通知它,要其写入数据。
  + CPU 通过数据线将数据 8 送入内存 FFFFFFFB 单元中
    ![](https://img-blog.csdnimg.cn/img_convert/ed76e9a4a2ce06d0a3cd20192956f863.png)



- 读取流程

+ CPU 通过地址线将找到地址为 FFFFFFFB 的内存
+ CPU 通过控制线发出内存读取命令,选中存储器芯片,并通知它,将要从中读取数据
+ 存储器将 FFFFFFFB 号单元中的数据 8 通过数据线送入 CPU寄存器中
  ![](https://img-blog.csdnimg.cn/img_convert/2fb17f543aa500524932669a322cd57a.png)


- 变量的存储原则

+ 先分配字节地址大内存,然后分配字节地址小的内存(内存寻址是由大到小)

+ 变量的首地址,是变量所占存储空间字节地址(最小的那个地址 )

+ 低位保存在低地址字节上,高位保存在高地址字节上

  ```c
  10的二进制: 0b00000000 00000000 00000000 00001010
             高字节←                        →低字节
  ```

最后,如果有任何疑问,请加微信 leader_fengy 拉你进学习交流群。

开源不易,码字不易,如果觉得有价值,欢迎分享支持。