结构体对齐预处理指令

使用方法:

方式一:

/*
n可以取以下5个数中的任意一个:1,2,4,8,16
来自定义结构体成员的对齐方式
*/
#pragma pack(n)

//这里放置结构体

#pragma pack ()//取消自定义字节对齐方式

方式二:

/*
n可以取以下5个数中的任意一个:1,2,4,8,16
来自定义结构体成员的对齐方式
*/
#pragma pack(push,n)

//这里放置结构体

#pragma pack(pop) //编译器到编译到此处时将恢复原来的对齐状态

------------注意--------------
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
相当于 #pragma  pack(push,4)  

默认状态下,系统会自动对结构体进行对齐

typedef struct userInfo{

    char a; //4字节
    int b;  //4字节
    short c;//2字节
    char d; //1字节
    char e; //1字节

} YF_userInfo;

以上结构体的总大小是12字节,其中第一个char型本应该是1个字节的,但是系统为了提高性能,对结构体进行了对齐,使其拥有4个字节的空间大小。


添加字节对齐


#pragma pack(push,1)
typedef struct userInfo{

    char a; //1字节
    int b;  //4字节
    short c;//2字节
    char d; //1字节
    char e; //1字节

} YF_userInfo;
#pragma pack(pop)

设置结构体按一个字节对齐,此时系统不再对结构体进行自动对齐,结构体中的成员占空间大小由自身的类型来决定,系统不再干预。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值