已知sizeof(char)=1,sizeof(short)=2,sizeof(int)=4,现在有个结构体如下:
struct size1
{
int a;
char c;
short s;
};
sizeof(size1)=8
struct size2
{
int a;
char c;
char b;
short s;
};
sizeof(size2)=8
环境:VC6.0,32位的Win7系统
为何size1和size2的sizeof会一样呢?
原因:结构体的sizeof涉及到内存对齐问题
内存对齐的时候整体占的内存一定是最大数据元素的整数倍,比如说第一个里面最大的是整形(4字节),那么整体的内存一定是4n个字节。但不一定是4元素个数。
下面看一下第一个size:a占4个字节,没什么问题,然后接下来4个字节先放上一个char,还剩3个字节,能放下short,所以char和short公用一个四字节块,虽然尾部的一个字节没有用。
第二个size:a占4个字节,然后接下来4个字节放两个char和一个short刚刚好。
所以size1和size2的sizeof在同一编译环境下是一样的。