#pragma pack(1)

文章讨论了编译器对结构体存储的优化策略,解释了为什么一个包含一个字符和一个整数的结构体在默认情况下占用8个字节,而不是5个字节。这是由于内存对齐,确保数据以4字节边界对齐,提高CPU访问效率。使用#pragmapack(1)可以强制连续排列,减少间隙,使结构体大小变为5字节。
摘要由CSDN通过智能技术生成

意思为编译选项为四字对齐,所有数据在内存中是连续存储的,以4字节的方式对齐。

struct s {
char j;
int i;
};

然后在主函数中写一句:printf("%d", sizeof(struct s))结果为8

这是编译器为了让程序跑的更快,减少CPU读取数据的指令中心,对结构体的存储进行了优化。

实际上第一个char型成员虽然本来只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员的地址能够被4整除。因此实际占用的是8个字节。而#pragma pack(1)让编译器将结构体数据强制连续排列,这样的话,sizeof(struct s)输出的结果就是5了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值