|
1. 概念: 现代计算机访问特定类型变量时在特定的内存地址访问,这就要求各种类型的变量按照一定的规则在地址空间上排列,这就是字节对齐。 2. 作用和原因: 各种硬件平台的处理方式的不同,效率的影响。 3. 四个重要基本概念: 3.1. 数据类型的自身对齐值(32位机): sizeof(char)=1, sizeof(short)=2,sizeof(int,long,float)=4,sizeof(double)=8 Byte. 3.2. 结构体或类的自身对齐值: 其成员中自身对齐值最大的那个值 3.3. 指定对齐值: #pragma pack(value)时的指定的value值 3.4. 数据成员、结构体和类的有效对齐值,记为N 自身对齐值和指定对齐值中最小的那个。 4. 对齐原理 有效对齐值N是最终来决定数据存放地址的值,就是数据存放开始地址满足条件start_address % N = 0。 5. 应用 设置机器缺省对齐方式的方法:#pragma pack(value) 取消其对齐方式:#pragma pack()。 6. Example:(按照4byte对齐, As: #pragma pack(4)) typedef union uinA { char a; int b[7]; double c; }A;
typedef struct tagB { int a; char b; A c; double d; }B;
Result: sizeof(A) == 28 sizeof(B) == 44
|