日常笔记(3):数据结构,字节对齐

本文解析了结构体在内存中存储时的字节对齐现象,解释了为何结构体的实际大小可能超过其成员变量所占空间之和。讨论了编译器如何通过字节填充来优化数据读取效率,并介绍了如何使用#pragmapack进行字节对齐控制。

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

如下:


struct s {
int i;
char ch;
};
 

通过 sizeof算出的大小为 8 ,而实际是 : int 4个字节,char 一个字节,共5个字节。 为什么会是8个字节内,一般机器是以4个字节进行寻址,所以编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化。实际上第一个char型成员虽然本来只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员的地址能够被4整除。因此实际占用的是8个字节。

使用#pagram pack 进行字节对齐就可以了如

#pragma pack(1)
struct s {
int i;
char ch;
};
#pragma pack()

1字节对齐, 通过sizeof算出就是 5了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值