1、内存对齐原因
#include <stdio.h> struct MyStruct { char da; double dda; int type[3]; }; int main(void) { int leng=sizeof(struct MyStruct); printf("%d",leng); return 0; }
结果为32;
解析:在结构体MyStruct中,基本类型长度最长的是double,为8个字节。所以以8个字节为标准进行对齐,则该结构体的变量所存储的位置应该为
.。。。。。。。(char)
........(double)
........(type[0]type[1])
....。。。。(type[2])
其中。是表示为了对齐所补上的字节。
如果结构体中的double类型改为int类型,即结构体中的数据类型最长的长度为4,则以4个字节为标准进行对齐,结果会变为20.
#include <stdio.h> union MyStruct { char da; double dda; int type[3]; }; int main(void) { int leng=sizeof(union MyStruct); printf("%d",leng); return 0; }
结果为16.
解析:在union中,变量共享内存,因为double类型长度最长,所以以8字节为标准,而union的大小就是最大的变量的长度。
int type[3]存放在内存的位置如下
........
....。。。。
原文:http://www.cnblogs.com/longzhongren/p/4345740.html