C语言中的结构体对齐

本文详细解析了C/C++中结构体成员变量的不同排列顺序如何影响结构体的大小,并介绍了如何通过预编译指令来控制内存对齐方式,从而优化结构体的存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1设结构体如下定义:

struct A {
    int a;


    char b;
    short c;
};
sizeof(strcut A)值为8

int

 x

char

short

 x

x

 

2现在把该结构体调整成员变量的顺序。
struct B {
    char b; 
    int a; 
    short c; 
};
这时候同样是总共7个字节的变量,但是sizeof(struct B)的值却是12

char

x

x

x

int

 x

 x

short

x

x

 

3下面我们使用预编译指令#pragma pack (value)来告诉编译器,使用我们指定的对齐值来取代缺省的。
#progma pack (2) /*指定按2字节对齐*/
struct C {
    char b;
    int a;
    short c;
};
#progma pack () /*取消指定对齐,恢复缺省对齐*/
sizeof(struct C)值是8

 

4修改对齐值为1
#progma pack (1) /*指定按1字节对齐*/
struct D {
    char b;
    int a;
    short c;
};
#progma pack () /*取消指定对齐,恢复缺省对齐*/
sizeof(struct D)值为7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值