struct的成员对齐问题-结构体实际大小问题

struct的成员对齐
注意:为了方便说明,等号左边是每个数据单独所占长度,右边是最终空间大小,以字节为单位。
一、什么时间存在对其问题:(32位机对齐方式是按照4字节对其的,以下所有试验都是在32位机上验证的)
  当结构体成员数据按照其顺序组合,无法按4字节对齐时,存在对其问题。
  如:
    1+1=2;
    1+2=3;
    1+2+1=4(而不是6或者其他);
    2+1=3;(不是4)
    以上是不存在对其问题的(因为没有超过4字节)。
  如:
    1+4=8;
    4+1=8;
    1+4+1=12;
    1+2+4=8;
    1+3+4=8;
    以上就存在对其问题,有超过4字节的数据。
二、存在对其问题时,应该如何对齐:
  当发生对其问题时,对其原则有两点:
  ①当所有成员数据和<=4时,结构体大小就是数据大小的和。
  ②连续数据类型的数据,如果可以组合成4,则将其组合,以节省空间。
  ③当和>4时,小于4字节的数据类型,其实际大小取min(4,max(所有数据类型大小))。注:所有数据类型大小,实质基本数据类型,不包括数组,结构体,
  如:
    char[5]  5=5;        超过的一个字符,时间大小=min(4,1)=1;
    1+2+4=8;           组合1、2,结果为8,而不是12.
    char + double +char =16;   实际是4+8+4=16;
    
附录:
①在32位机中下边基本数据类型及其长度(byte):
char:   1
short:   2
int:   4 
long:   4
long long:8
pointer: 4
enum:  4
double:  8
float:   4
 
原文地址:https://www.cnblogs.com/cz-blog/p/4691756.html