「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」。
数据单位
- 位 :一个二进制位
- 字节 :8个二进制位表示一个字节
由于八个二进制位转换成十六进制后是两位十六进制数, 所以两个十六进制数占用一个字节:
0x20 ;占用一个字节
或者
20H ;占用一个字节
在计算机中最小的数据单位是位,但在内存中,最小的数据单位是字节,一个内存单元占用一个字节, 内存单元就是一个存放数据的容器,可以比喻为一栋公寓里面的小单间, 每个单间住着一对夫妻
内存单元和地址
内存单元相当于一栋公寓里的小单间, 每个单间里面住着一个字节(一对夫妻) , 一对夫妻是两个人, 形容两个十六进制数
地址就相当于这个房间的门牌号, 通常使用十六进制表示(也叫物理地址)
cpu想要读写内存中的数据, 需要通过地址来需要对应的内存单元,也叫寻址
那么问题来了, 一栋公寓里一共有多少个单间呢, 或者说单间的数量跟什么有关呢?
- 内存条容量: 既然每个内存单元占的空间是固定的, 那么内存容量越大,房间自然就越多
给房间贴门牌号
0x1
0x2
0x3
...
0x10
0x20
...
0x100
0x200
...
0x1000
0x2000
...
0xFFFF 65535
0xFFFFA
现实中门牌编号最大值和什么有关?
-
装修师傅的计算能力
-
门牌金属板的宽度(字体大小不变的前提)
在计算机的世界中
-
装修师傅的计算能力----->cpu运算能力
-
门牌金属板的宽度------->地址总线宽度(地址总线数量)
如果对应的cpu是16位的, 同时地址总线也是16位,那么最大只能运算表示16位数也就是0xFFFF ,
如果对应的cpu是32位的, 同时地址总线也是32位,那么最大只能表示32位数也就是0xFFFFFFFF
如果对应的cpu是64位的, 同时地址总线也是64位,那么最大只能表示64位数也就是0xFFFFFFFFFFFFFFFF
在8086cpu中 cpu是16位 但是地址总线却是20位, 本来最大只能表示16位地址值, cpu设计者为了让其能表示20位地址,使用了段地址*16+偏移地址的形式来表示20位地址
物理地址=段地址*16+偏移地址
如果要表示一个20位物理地址0xFFFFA,可以有一下四种写法:
0xFFFFA=0xFFFF*16+0x000A //FFFF0 10*10=100
0xFFFFA=0xFFF0*16+0x00FA
0xFFFFA=0xFF00*16+0x0FFA
0xFFFFA=0xF000*16+0xFFFA
因此计算机的寻址能力不单单和cpu有关还和地址总线有关, 32位操作系统对应32位地址总线, 这也就是为什么即便你用的是64位cpu,如果只装了32位操作系统,无法完全发挥cpu和内存的性能