您的位置:首页 > 其它

C的struct内存对齐的问题

2009-08-25 10:44 211 查看
采用VC6的的编译器
对于struct:
struct ST_DAT1
{
char cDatA;
int nDatC;
char cDatB;
} stDblChr;
struct ST_DAT2
{
char cDatA;
char cDatB;
int nDatC;
} stDblChr;
很显然,编译器在编译的时候,要做内存对齐的调整。由于两个struct中最长的变量都是int,占据了4个字节的内存空间,因此都会提升至int型。
对ST_DAT1,cDatA紧接着是int型的nDatC,因此cDatA会自动提升成int。其实这个地方是由于分配了cDatA之后,剩下的内存空间只有3个字节,不足以放下一个int型,要存储nDatC的时候,nDatC只有另起炉灶,放到一个新的4字节空间里面,因为cDatA自动提升成了int。最后的cDatB,其后面没有东西了,也会自动提升成int型。因此ST_DAT1占据了12个字节(用sizeof检查)
对ST_DAT2,cDatA,和cDatB两个写得相连,编译器,碰到cDatA,先分配一个字节给他,再碰到cDatB,由于和cDatA的数据宽度一样,因此不会做提升,同意分配一个字节他,此时总共分配了两个字节。等编译器碰到nDatC,由于数据位宽不一样,就要做自动提升了,和前面的道理一样。因此这个时候sizeof检查ST_DAT2占据了8个字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: