没错,今天2月14,单身狗如我情人节也只能苦逼地撸代码了。不知道大家有没有发现一个奇怪的现象,见图~
结构test里面包含了1个int型变量和2个char型变量,照理说sizeof( struct test )应该等于它们三个相加的结果6才对,为什么会等于8呢?
事实上,结构成员在内存中的存储并不是想当然地一个紧挨着一个排列下来的,由于提高数据读取速度的要求以及其他一些方面的原因,计算机系统对内存中基本数据类型的存放存在一种内存对齐机制,即要求这些数据的首地址必须是某个数K(通常为4或8)的整数倍,具体规则如下:
1.编译器按照结构体成员列表顺序给每个成员分配内存
2.当成员需要满足正确的边界对齐时,成员之间用额外字节填充
3.结构体的首地址必须满足结构体中边界对齐要求最为严格的数据类型所要求的首地址
4.结构体的大小为其最宽数据类型的整数倍
知道了这些规则,这个现象就不难理解了,如下图,int类型的a大小为4字节,占据图中1,2,3,4这四个字节,char型的b,c长为1字节,分别占据5&#x