字节对齐(struct 和 union)

本文介绍了C/C++中关于字节对齐的规则,包括数据成员按照其大小的整数倍对齐,结构体内部最大元素大小的整数倍开始存储,以及结构体总大小为最大成员的整数倍。同时,对比了结构体与联合体在对齐策略上的差异,联合体的大小是所有成员基本长度的最小公倍数。
摘要由CSDN通过智能技术生成
 在没有#pragma pack(n)宏的情况下,字节对齐应遵循以下三个基本原则:

1、数据成员对齐规则:结构体(struct)或联合体(union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始。

2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。

3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍(若求结构体B的大小,B中包含结构体A,A中最大成员字节数为8,则B的大小必为8的整数倍)。

#include <iostream>
using namespace std;
//#pragma pack(1) //结果:sizeof(A) = 21, sizeof(B) = 37(1字节对齐,其实就是没有对齐规则)
//#pragma pack(2) //结果:sizeof(A) = 22, sizeof(B) = 38
//#pragma pack(4) //结果:sizeof(A) = 24, sizeof(B) = 44
//#pragma pack(8) //结果:sizeof(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值