字节对齐的探讨

以前和很多网友发表过有关此类问题的文章,我也是通过这些文章和一些书籍了解了这个知识。这里自我总结一下,希望对给为有所帮助。

struct MyStruct

{

  char dda;//偏移量为0,满足对齐方式,dda占用1个字节;

  double dda1;//下一个可用的地址的偏移量为1,不是sizeof(double)=8的倍数,需要补足7个字节才能

//使偏移量变为8(满足对齐方式),因此VC自动填充7个字节,dda1存放在偏移量为8

             //的地址上,它占用8个字节。

  int type//下一个可用的地址的偏移量为16,是sizeof(int)=4的倍数,满足int的对齐方式,所以不

         //需要VC自动填充,type存放在偏移量为16的地址上,它占用4个字节。

}//所有成员变量都分配了空间,空间总的大小为1+7+8+4=20,不是结构的节边界数(即结构中占用最

//大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以需要填充4个字节,以满足结构的

//大小为sizeof(double)=8的倍数。 

所以该结构总的大小为:sizeof(MyStruc)1+7+8+4+4=24

对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)

Char
偏移量必须为sizeof(char)1的倍数

int, long, float, BOOL
偏移量必须为sizeof(int)4的倍数

double
偏移量必须为sizeof(double)8的倍数

Short
偏移量必须为sizeof(short)2的倍数

静态成员不对结构或者类的大小产生影响!

一般建议这样子定义结构:

struct
    {
        unsigned int u8DummyLuid:10;//10表示是10个bit
        unsigned int u16DummyLuid:16;
        unsigned int u8DataSource:6;
    } s_apoluid;

发布了30 篇原创文章 · 获赞 0 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章