结构体在内存中的存储

文章探讨了C++中结构体成员的内存对齐规则,指出VS2022默认对齐数为8。每个成员按照自身大小和默认对齐数的较小值对齐,结构体大小必须是最大对齐数的整数倍。例如,给定的结构体a包含一个int、一个char和一个float,其大小为12字节,符合对齐规则。
摘要由CSDN通过智能技术生成

自定义结构体通常有多种不同类型的变量

struct a
{
    int n;
    char c;
    float f;
}

如上结构体a中有四个字节大小的整形n,也有一个字节的字符c等,结构体存储并不是简单的将这些变量紧挨着存在一起

其中存在一个概念:对齐数

这个数在不同的环境中不同,在vs2022中这个数默认是8,而每一个结构体成员的对齐数就是这个成员自身大小和默认对齐数中较小的那个。比如成员n自身大小是4,而默认对齐数是8,取其较小值,所以n的对齐数是4。

知道了每个成员的对齐数,那这个对齐数要咋用嘞。

struct a
{
    int n;//4
    char c;//1
    float f;//4
}
  1. 结构体的第一个成员放在结构体存放位置的零偏移位置处。

  1. 从第二个成员开始每个成员存放在位于自身对齐数的整数倍偏移量处

  1. 结构体的大小必须是所有成员里最大对齐数的整数倍

  1. 如果结构体成员中嵌套有结构体,那属于成员的结构体要对齐到自身成员中最大对齐数的整数倍处,那么这个结构体大小要是,所有成员(包括嵌套结构体中的成员)中最大对齐数的整数倍

上面的结构体a的大小是12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值