内存对齐

2017-04-28  本文已影响0人  RobotBerry

定义

在结构或者类中,编译器为每个成员变量按照其自然边界(alignment)分配空间,各个成员变量按照它们被声明的顺序在内存中顺序存储。

目的

  1. 便于cpu快速访问
  2. 节省存储空间

方法

在缺省情况下,编译器会为每一个变量或是数据单元按其自然对界条件分配空间。也可以使用#pragma pack n伪指令设置字节对齐的数字。默认是4。

具体对齐规则:第一个成员的地址和整个结构的地址相同。后面每个成员的地址偏移量必须是n和成员的大小的最大值的整数倍。

例子

class A 
{
  int i;
  char c;
  double d;
  short s;
}

int是4个字节,char是1个字节,double是8个字节,short是2个字节。默认pack数为4。根据上面的内存对齐规则,可以算出每个成员的内存偏移量:

内存分布情况如下:

int i char c double d short s
0-4 4-5 8-16 16-18
上一篇下一篇

猜你喜欢

热点阅读