1.第一个成员在结构体变量偏移量为0的地址处。
2.除第一个成员外,所有成员变量对齐到该结构体成员对齐数的整数倍的地址处。
3.该结构体大小为结构体对齐数的整数倍。
4.如果该结构体里面还含有一个成员结构体A,则A对齐到A这个结构体的结构体对齐数的整数倍处。
注意:请把结构体成员对齐数和结构体对齐数区分清楚。
结构体成员对齐数=min(结构体成员大小,编译器默认对齐数),VS中默认对齐数为8;
结构体对齐数=max(所有结构体成员对齐数);
1.联合体大小最小为最大成员的大小;
2.联合体的大小为成员中的最大对齐数的整数倍。
1.性能原因:数据结构(尤其是栈)应该尽可能在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问,而对齐的内存访问仅需要一次访问。
2.平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。