|
字节对齐是C/C++编译器为了加速CPU寻址速度而采用的一种策略,通常的表现是将结构中某些不足CPU字长的成员填入若干字节的垃圾值使整个结构的大小成为CPU字长的整数倍。一个CPU的字长,通常简单地理解为一个sizeof(int)的大小。
字节对齐的规律是:
假设结构体的其实地址为0, N字节对齐
1)结构体成员变量地址是min(变量类型大小,N)的整数倍,否则补齐。
2)结构体的长度为结构体中所有对齐参数的整数倍,否则补齐。
举例说明:
#include "stdio.h"
#pragma pack(4) #pragma pack(push) #pragma pack(4) struct{ short a1; //2 short a2; //2 char a3; //1 }A; //5+1
struct{ short a1; //2 char a2; //1+1 short a3; //2 }B; //6
struct{ long a1; //4 short a2; //2 }C; //6+2
struct{ short a1; //2+2 long a2; //4 short a3; //2 }D; //10+2
struct{ char a1; //1 char a3; //1 }E; //2
#pragma pack(pop)
void main(void) { int num; num = sizeof(A); num = sizeof(B); num = sizeof(C); num = sizeof(D); num = sizeof(E); }
|