前几天在看redis源码的sds数组,大量的柔性数组应用,array[-1]等等刷新了认知,决定记下来。
1.字节对齐问题
http://blog.sina.com.cn/s/blog_7cfc0d130102vrq8.html这里面有大量的例子,不赘述。
原则有二,第一,各成员变量的偏移量(就是前面的成员加起来占了多少个字节),必须为该成员大小的整数倍。(char1字节,short 2字节,int 4字节,double 8字节),否则在上一个变量后填充字节数
struct X
{
char a; //自身1个字节 +3 = 4个字节
char* b; //char给的的偏移量只有1个字节,可是指针自身4个字节,不行不是整数倍,b说要给a加三个字节 (1+3) + 4 = 8
double c; //偏移量有8个字节,自身8个字节,完美。 8+8 = 16
}S1;
综上,sizeof(s1) = 16;