结构体字节对齐的规则

本文详细介绍了C/C++中结构体字节对齐的计算规则,包括根据结构体中最大类型确定字节数、元素能否在一行内完全放置以及如何通过#pragma pack指定字节对齐。通过示例解释了不同情况下结构体的大小计算,帮助理解内存布局和优化存储效率。
摘要由CSDN通过智能技术生成

字节对齐的计算规则

1、先看结构中最大类型的数据,包括嵌套结构体(如果有)。确定一行的最大数(如果有double,那一行就是8个字节,如果最大是int或者long,那一行就是4个字节,原来一直以为是编译器决定,这不对的)。

2、如果只有一个元素,那就是这个元素的大小,不需要补齐。
3、单一变量,先看看元素放到这一排的剩余位置能否完全放下,如果放不下,则从下一行的首地址开始放。
4、嵌套子结构体则要看看这个元素的整个大小( 就是累加的大小,不是对齐的大小 )放到这一排的剩余位置能不能放下,放不下则从下一行开始,子结构体中的元素排列规则和单一变量相同)

 
char(1),short(2),int(4),float(4),long(4),double(8) 

例1

struct {

int a;  //第一行,最大元素,所以每行有4个字节

short b;  //第二行首位,第二行还有两个2字节的剩余空间

char c1;  //第二行

char c2;  //第二行

} a1; //大小为8

空间分布(8个字节)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值