字节对齐详解++

来源:互联网 发布:淘宝客服售后回复话术 编辑:程序博客网 时间:2024/06/07 08:26

字节对齐详解文章见http://blog.csdn.net/weixing979/archive/2006/05/12/725638.aspx

A结构体做为B结构体成员的情况
则计算A的长度和A的有效对齐值,然后进行填充计算


如下结构体

#pragma pack(8)
struct s1
{
short a;
long b;
};

struct s2
{
char c;
s1 d;
};

s1做为s2的成员,s1的长度为8,s1的有效对齐值为4( s1的自身对齐值为4(成员short与long中的自身对齐值的最大值)
s1的有效对齐值为 min(4,8) = 4)
所以s2 的长度为 1 + 3(填充) + 8 = 12


如果设定 #pragma pack(4)
s1长度为8
s1的有效对齐值为 min(4,4) = 4
s2 的长度为 1 + 3(填充) + 8 =12

如果设定 #pragma pack(2)
s1长度为6
s1的有效对齐值为min(4,2) = 2
s2的长度为 1 + 1(填充) + 6 = 8

再看下一个例子
#pragma pack(8)
struct s1
{
short a;
double b;
};

struct s2
{
char c;
s1 d;
};
此时 s1长度为16,s1的有效对齐值为min(8,8) = 8 (其中s1的自身对齐值为double长度8)
s2的长度为1+7(填充)+16 = 24

如果设定 #pragma pack(4)
s1长度为12,s1的有效对齐值为min(8,4) = 4
s2的长度为1+3(填充)+12= 16

如果设定 #pragma pack(2)
s1长度为10,s1的有效对齐值为min(8,2)= 2
s2的长度为1+1(填充)+10 = 12

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/weixing979/archive/2006/05/13/727419.aspx

原创粉丝点击