struct、union的对齐问题

#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;
}
  • 运行结果:
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值