初始化顺序与字节对齐

1 全局变量和全局静态变量的初始化顺序是未定义的,所以不能够在全局变量初始化话的时候,建立他们之间的依赖关系。

  在single模式下了,静态变量声明为局部变量以防止初始化顺序的未定义 导致 静态变量的值错误。

2.类初始化的时候

 类成员变量的初始化顺序,是按照变量成员的声明顺序,而不是初始化参数列表的顺序,

所以在建立初始化参数列表的时候,

最好不要建立需要初始化参数之间的依赖关系,

否则可能碰到不可预期的问题。

 

 

字节对齐的问题

1).从结构体外部来看,结构体变量的首地址能够被其最宽基本成员的大小整除;从结构体内部来看,它的第一个数据成员的地址相对于整个结构体首地址的偏移量为0,也就是说,结构体的第一个数据成员存放在偏移量为0的地方;
2).结构体中的每个数据成员的有效对齐值都取其自身对齐值和指定对齐值中的较小的那个对齐值;或者说是,结构体中的每个数据成员相对于结构体首地址的偏移量都是该数据成员大小和指定对齐值中较小的那个值(或有效对齐值)的整数倍,如有需要,编译器会在数据成员之间加上填充字节;
3).如果结构体中还有嵌套的结构体或结构体变量,那么就要把这些嵌套进去的结构体或结构体变量拆成基本类型成员,并取其最长的基本类型成员的对齐方式;
4).结构体整体的有效对齐值必须为其最宽基本类型成员大小的整数倍;或者说是,结构体整体的大小为结构体中最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一个成员之后加上填充字节;换句话说是,结构体整体的有效对齐值按照结构体中最宽基本类型成员的大小和指定对齐值中较小的那个值进行;

struct{

  char a; 0

       int   b; 4-7

  double c;8-15

  char d; 16

}

struct 0-31

 

posted on 2015-12-04 11:25  abstract_cai  阅读(276)  评论(0)    收藏  举报