C语言中sizeof 用法跟疑惑

C语言中sizeof 用法和疑惑

利用字节对齐原理解释不通,能有人给解释一下么

 

VS2005 32bitcpu

 

 

#include "stdio.h"
#include "stdlib.h"

#pragma pack(4)

struct LALA
{
 short st2;
 char c1;
 short st3;
 char c4;
 short st;
 char c2;
 char c3;

 long ll;
};
//============================下面的疑惑========================
struct LALA2
{
 char c1;
 short s1;
 char c2;
 long l1;
};

struct tagA
{
 char a;
 short b;
 char d;
};

typedef struct example
{
 unsigned short usA;
 unsigned long  ulA;
 unsigned short usB;
 unsigned char  ucA;
 unsigned short usC;
}example_s;

typedef struct example2
{
   unsigned long  ulA;
   unsigned short usA;
   unsigned short usB;
   unsigned short usC;
   unsigned char  ucA;
   unsigned char  ucReserved;

}example_s2;
void main()
{
 LALA lala;

 printf("sizeof(lala):%d\n",sizeof(lala));(16)

  LALA2 lala2;

 printf("sizeof(lala2):%d\n",sizeof(lala2));(12) //利用字节对齐原理解释不通,能有人给解释一下么

 struct tagA sta,stb[2];
 printf("sizeof(stb):%d\n",sizeof(stb));(12)

 getchar();


}