您的位置:首页 > 其它

struct、union的对齐问题

2016-09-07 19:58 211 查看
#include <stdio.h>
/*32位机器访问起始地址是4的倍数处的内存比较方便
min(系统默认(4),数据成员自身长度)*/
struct node1{  //sizeof(struct node1)=8;
char a1;  //1
short b1; //2
int c1;   //4
};
struct node2{  //sizeof(struct node2)=12;
char a2;  //1
int c2;   //4
short b2; //2
};
struct id_all_char{//
char id3[3]; //3
char ver;    //1
char revision;//1
char flag;    //1
char size[4]; //4
};
struct idid{
char id3[3];
char ver;
char revision;
char flag;
int size;
}__attribute__((packed));
//__attribute__((packed))用于告诉编译器不要对其进行内存对齐!

struct all_short{//sizeof(struct all_short)=6;而不是8!因为a,b,c三个都是short,所以a,b,c最大的数据类型是short,所以min(4,2)=2(short),所以最后整个struct按照short型(长度为2)对齐
short a;//2
short b;//2
short c;//2
};

struct mixed{
char a; //1
short z; //2
int i;  //4
char e; //1
char s;  //1
};

struct mixed_se{
int s;
short w;
double d;
char e;
short i;
};

union _u{
char e[3];
short f;
int s;
double z;  //8
};

int main(void)
{
printf("sizeof(struct node1)=%d\nsizeof(struct node2)=%d\n",sizeof(struct node1),sizeof(struct node2));
printf("sizeof(struct all_short)=%d\n",sizeof(struct all_short));
printf("sizeof(struct id_all_char)=%d\n",sizeof(struct id_all_char));
printf("sizeof(struct idid)=%d\n",sizeof(struct idid));
printf("sizeof(struct mixed)=%d\n",sizeof(struct mixed));
printf("sizeof(struct mixed_se)=%d\n",sizeof(struct mixed_se));
printf("sizeof(union _u)=%d\n",sizeof(union _u));
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct