C++ 对齐规则

本文介绍了C++中的内存对齐概念,包括为什么需要对齐以及对齐规则。对齐规则包括结构体的起始地址和大小必须满足特定条件,成员变量的相对偏移也需要满足其自身大小的整数倍。此外,文章提到了联合体的对齐特性,并举例说明了如何计算结构体的大小。最后,给出了在32位VS环境下的对齐示例。
摘要由CSDN通过智能技术生成

1.什么叫对齐?

在C/C++中,数据结构或类的成员变量,并不是按照它们的大小,一个一个紧凑地排列在空间上的。它们是按照一种特定的方法排列的,有可能在两个成员变量之间插入一个或个byte,以保证每个成员变量的起始位置是都是从某些特定的位置开始的。这就是对齐。单纯从语言上描述对齐有些枯燥难以理解,下文将配以例子说明C/C++是基于什么样的规则对齐的

2.为什么要对齐?

1.在大多数平台上,系统从某些特定的位置开始读数据非常快,而从其它位置读数据会慢很多。C/C++是一种注重效率的语言,为了使程序速度尽可能地快,选择牺牲很少的空间,用填充byte的方式保证所有数据的存储都从这些特定的位置开始,而达到较高的运行速度

2.便于移植,有些系统不支持某些地址的访问。

3.对齐规则

(1)结构体的起始地址能被n整除  

(2)结构体的总大小是结构体最大成员体的整数倍

(3)结构体成员体的相对起始偏移是成员体大小的整数倍

 当说到一个成员变量是n字节对齐的,说明该变量的起始地址能被n整除。比如某变量的对齐字节数是4,那么它的首地址的16进制形式一定是以0/4/8/C结尾的。

一般情况下 C/C++ 的变量所占用的字节数

        char:    1字节;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值