C语言的struct有关问题

C语言的struct问题
大家帮忙看下下面的结构占用多少字节:
条件:在x86的32位操作系统上,GCC编译器

struct str2_t
{
unsigned short s;
unsigned int i;
unsigned char c;
}str2;

你们猜sizeof(str2)等于多少?是9还是7?但是我实际运行的时候是12.很不解。
C struct

------解决方案--------------------
会有内存对齐的问题,紧凑的排放用#param pack(1)修饰。


引用:
大家帮忙看下下面的结构占用多少字节:
条件:在x86的32位操作系统上,GCC编译器
C/C++ code?123456struct str2_t{    unsigned short s;    unsigned int i;    unsigned char c;    }str2;
你们猜sizeof(str2)等于多少?是9还是7?但是我实际运行的时候是12……

------解决方案--------------------
运行一下,分析结果(提示: 内存对齐+结构体成员补齐)

#include <stdio.h>

typedef struct str2_t
{
    unsigned short s;
    unsigned int i;
    unsigned char c;    
}str2;

int main()
{
  str2 o;
  printf("start of s: %p, end of s: %p\n", &o.s, &o.s+1);
  printf("start of i: %p, end of i: %p\n", &o.i, &o.i+1);
  printf("start of c: %p, end of c: %p\n", &o.c, &o.c+1);
  printf("start of o: %p, end of o: %p\n", &o, &o+1);
  return 0;
}


------解决方案--------------------
我觉得是内存对齐的问题,

struct str2_t
{
    unsigned short s;
    unsigned int i;
    unsigned char c;    
}str2;
里面,再加一个unsigned char c2;sizeof(str2)还是12,后面补两个0;
是这样对齐的

------解决方案--------------------
--short--
------解决方案--------------------
----
------解决方案--------------------
----
------解决方案--------------------


------解决方案--------------------
--------int--------
------解决方案--------------------


------解决方案--------------------
char
------解决方案--------------------
----
------解决方案--------------------
----
------解决方案--------------------
----
------解决方案--------------------



------解决方案--------------------
我还以为是8