literwave game.

游戏开发

Word count: 343Reading time: 1 min
2023/04/30

内存对齐

​ 内存对齐是为了使用空间换时间的一种策略

为什么需要内存对齐

​ cpu访问内存时,并不是逐个字节访问,而是以字长为单位访问,比如64位的cpu,字长为8个字节,那么cpu访问内存的单位也是4字节。(忽略cpu访问缓存而不是内存)

​ 比如16个字节,一次读取8个字节那么只需要读取2次。

举例

​ 假如有以下结构体

1
2
3
4
struct Test{
uint8_t a;
uint64_t b;
}

​ a占一个字节,b占8个字节,如果按照内存对齐的方式,cpu只需要读取两次,第一次读取a,第二次读取b。如果不是按照内存对齐方式,第一次读取a变量,第二次读取b变量的时候,需要读取a变量,再偏移7个字节,读取第二个8字节,偏移一位。cpu需要读取三次。

规则

  1. ​ 对于内置类型,只要它的地址是它长度的整数倍即可。
  2. ​ 对于 struct,其中的每个数据都要对齐,struct 本身也要向其中最大的那个数据对齐。
  3. ​ 对于 union,按照其中最长的那个数据对齐。
  4. ​ 对于数组,无需特殊处理,因为其中每一个数据都对齐了,数组本身就对齐了。
CATALOG
  1. 1. 内存对齐
  2. 2. 为什么需要内存对齐
  3. 3. 举例
  4. 4. 规则