找工作的时候笔试题经常会考这个知识点,今天总结一下,有几大原则:
- 结构体变量的首地址能够被其最宽基本类型成员的大小所整除,这句话可能不是那么好理解,举个例子
struct A
{
int a;
char b;
short c;
};
首先在指定对齐字节大小时,默认是结构体里最宽的基本类型,在上面例子中就是Int4字节,假设A从地址空间0×0000开始排放,0×0000%40,存放在0×0000,0×0001,0×0002,0×00003中,接下来是char b占一字节,0×0004%10,存放在0×0004中,最后是short c占2字节,由于0×0005%2==1,无法整除,这时就需要填充字节,c从0×0006开始存放,到0×0007为止
2. 如果结构体A含有结构体成员B,那么B的起始位置必须是B中最大元素大小整数倍地址;(结构体包含结构体中的情况)
3. 结构体的总大小,必须是内部最大成员的整数倍;