Aim: 求解sizeof(X)
definition:
1)对界(a)e.g.对齐的位置: 从0开始算; 对齐条件n指开始元素位置编号是n的整数倍
2)占多少字节(b):根据数据类型储存空间算
3) sizeof指的一共占的字节数, 与对界和数据类型存储空间有关
sizeof(X) = Fun(a, b), 对于参数b根据硬件有关当硬件固定是参数b固定,参数a需要计算。对界本身有两种分类 as follows:
A)自然对界:指default版的对齐方式
对齐规则:
对于基本类型(int, char, long, double): 对界条件 = 该类型的储存空间
复合数据类型(array, struct, union): 对界条件 = 最大成员储存空间
eg:
struct s0{
short a; // 2
long b; // 8
int c; //4
}s0;
struct s1{
short a; //2
int b; //4
long c; //8
}s1;
printf("%d", (int)sizeof(s0)); // 24
printf("%d",(int)sizeof(s1)); //16
具体参照reference的内容 s0最后需要补齐位数(对界条件为8) 所以为24
B)强制对界
可以通过#pragma pack(M)改变编译的对界方式 即set 对界方式= M
对界条件 = min(编译器对界条件, 自身对界条件)
提示:
复合类型对齐方式 = 最大成员的对齐方式
数组对齐方式= 元素对齐方式
reference:
http://www.th7.cn/Program/cp/201209/92293.shtml ps上面的size值可能有问题,意会即可,本blog在linux centos 6.3_x64上测试