1. 程式人生 > >結構體的大小 記憶體對齊

結構體的大小 記憶體對齊

結構體的大小 記憶體對齊

 

Struct A

{

   int a;

   int b;

};

 int main()

{

Printf(“%d\n”,sizeof(struct A));

共佔8位元組

 

Struct B

{

char a;//1+3(加上3成為4的倍數,雖浪費了3個位元組,但速度更快)

int b;//4

};

共佔8位元組


 

 Struct C

{

   char a;//1+1(加上12的倍數

)

   short b;//2

   int c;//4

}

共佔8位元組

 

Struct D

{

   char a;//1+3(加上34的倍數)

   int b;//4

   int c;//4

   double d;//8+4(所有位元組加起來之和要為8的倍數,一共是20位元組,並不是8的倍數因此在加上424248的倍數,全部加起來要是最大的那一個的倍數才可)

}

共佔24位元組

 

 Struct E

{

   char a;//1+3(加上34的倍數)

   int b;//4

   short c;//2+2(原來位元組之和為10,因為最大的為int型別,判斷10不是4的倍數,因此在加兩個位元組即可)

}

共佔記憶體10+2位元組//考慮陣列的記憶體

Struct E arr[2]

 

 對比:

 

 

Struct G//不需要考慮對齊的應用

{

  char a;//1

  char x;//保留,不適用

  short b;//2

  int c;//4

}