字節對齊的探討

以前和很多網友發表過有關此類問題的文章,我也是通過這些文章和一些書籍瞭解了這個知識。這裏自我總結一下,希望對給爲有所幫助。

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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章