关于结构体内存分配机制的详解。 直接上例子。
typedef struct strdent1
{
int a; //4字节
char b; //1字节
char c[3]; //3字节
}std1; //4+1+3=8
typedef struct strdent2
{
char a[3]; //3字节
int b; //4字节
char c; //1字节
}std2; //3+4+1=8
printf("%d \n",sizeof(std1));
printf("%d\n",sizeof(std2));
按理来说两个都应该为8.
运行结果显示:
那么。为什么会出现这种状况呢?
结构体内存分配时,每次申请一块最大元素的空间,存放首元素,若剩余空间可以放下下一个元素,则不申请新空间,仅在其后存放下一个元素。若余下空间不足以继续存放下一个元素,则在后面申请新的空间(大小与最大元素相等),存放下来的元素。
对于std1:先开辟4个字节,存放Int后占满,再开辟4个字节(同最大元素相等,在此为int),存放char a[3],发现余下1字节,恰好存放余下来的char c.那么,