一个字等于两个字节:16位
一、存储字长
- 主存的一个存储单元所包含的二进制位数
- 目前大多数计算机主存按字节编址,主要由32为和64位
- (一字节=8比特)
- 存储字长一般应是字节的整数倍
二、数据存储与边界的关系
- 按边界对齐的数据存储
浪费一定的空间
-
边界对齐与存储地址的关系:(32位为例)
- 双字长边界对齐:起始地址最末三位为000(8字节整数倍)
- 单字长边界对齐:起始地址最末二位为00(4字节整数倍)
- 半字长边界对齐:起始地址最末一位为0(2字节整数倍)
- 未按边界对齐的数据存储
- 节省了空间,但增加了访存次数
-
例题:
-
设存储字长为64位,对 short 变量长度为16位,数据存储按整数边界对齐,关于short 变量 j 在主存中地址
64位:64 / 8 = 8字节
变量 j 的地址可为:xx00、xx02、xx04、xx06、xx08 、... 则:j 的物理地址 mod 8 = 0,2,4,6
-
-
设存储字长为64位,对 char 变量长度为8位,数据存储按整数边界对齐,关于char 变量 i 在主存中地址
64位:64 / 8 = 8字节
变量 i 的 地址可为:xx00、xx01、xx02、 ... 、 xx08、xx09 、...
则:i 的物理地址 mod 8 = 0、1、2、3、4、5、6 、7
三、大端与小端存储方式:
数据:高位在前;地址:高位在后
-
Big-endian,大端:最高字节地址是数据地址(0123存成0123)
- 数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
-
Little-endian,小端:最低字节地址是数据地址(0123存成3210)
- 数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中
无论是大端还是小端,每个系统内部是一致的,但在系统间通信时可能 会发生问题!因为顺序不同,需要进行顺序转换
0x12345678
按大端模式存放时,其所在存储单元最低字节单元存放的数据是0x12
按小端模式存放时,其所在存储单元最高字节单元存放的数据是0x12
-
例题
某计算机按字节编址,数据按整数边界存放,可通过设置使其采用小端方式或大端方式,有一个float 型变量的地址为 FFFF C000H ,数据 X = 12345678H,无论采用大端还是小段方式,在内存单元 FFFF C001H,一定不会存放的数是
12H、78H