首先看一个简单的程序:
#include<stdio.h>
void main()
{
struct inner
{
char c1;
double d;
// char c2;
};
printf("the size of struct inner is :%d\n",sizeof(struct inner));
}
在Ubuntu10.04下用gcc编译输出结果为:the size of struct inner is :12
去掉注释输出结果为:the size of struct inner is :16
char 类型占一个字节,double类型占8个字节,结果为什么不是9和10呢,原因是在开辟空间时存在内存对齐问题:linux下是以4字节对齐的,第一种情况下c1以4字节对齐,开辟4个字节的空间,d开辟8个字节,所以结果是12;第二种情况下(去掉注释)c1,c2以4字节对齐,分别为其开辟4字节空间,为c1,c2一共开辟8字节就可以了,d同样以4字节对齐,开辟8字节,所以结果就是16。
个人浅见,如有不对地方请高手赐教。