1. 程式人生 > >結構體的大小,內有對齊

結構體的大小,內有對齊



#include <stdio.h>
struct A
{
 int a;
 int b;
};   //最後求得的位元組數是8
struct B
{
 char a;
 int b;
};   //最後求得的位元組數也是8(因為它浪費了三個位元組而提升了速度)
struct C
{
 char a;   //1+1  //由於1不是2的倍數,所以要加1
 short b;   //2   //由於2+1+1是4的倍數所以此處2不用再加
 int c;   //4 
};   //最後求得的位元組數是 4+2+1+1=8

struct D   //【記憶體對齊】
{
 char a;
 char x;   //保留不使用
 short b;
 int c;
};   //最後求得的位元組數一直是8

struct E
{
 short a;   //2+2
 int b;   //4
 long long *c ;   //4  //看*  因為是指標所以是4
};   //最後求得的位元組數是2+2+4+4=12

struct F
{
 char a;   //1+3
 int b;   //4
 short c;   //2 
};   //本來最後求得的位元組數是 1+3+4+2=10,(但是因為10不是4的倍數,所以需要10+2=12)
//【需要最後求得的位元組數是單個最大的成員的倍數

所以本題是12而不是10】
//(用圖中的解釋是因為結構體還可以定義陣列(當定義陣列時,藍色部分可以解決但是綠色部分的紅線處解決不了))

struct G
{
 int a;  //4
 struct HH
 {
  char b;  //1+3
  int c;  // 4
 };
};   //最後求得的位元組數是12
struct H
{
 int a;  //4+4
 int b;  //8
};   //最後求得的位元組數是4+4+8=16

int main()
{
 printf("%d\n",sizeof(struct A));
 return 0;
}