C++基础知识13:结构体内存管理

一、本文内容与前置知识点

1. 本文内容

结构体内存管理,其中内存对齐,padding和结构体内存大小的padding,以及为什么要内存对齐。

2. 前置知识点

  1. c++关于结构体的知识点

二、内存对齐规则

1. 自然对齐

  • 规则1:一个变量的内存起始地址正好等于其长度的整数倍,不足要补齐。
  • 规则2:结构体这样的复合结构的总大小,必须是其内部最大成员的整数倍,不足的要补齐。

复合结构总大小时最大成员整数倍可以保证结构体数据也是对齐的。

struct Example {
    char a;    // 1字节
    int b;     // 4字节
    short c;   // 2字节
};
//计算方式
//规则1:1+3(padding)+4+2 = 10
//规则2:10+2 = 12

2. 复合结构体的内存对齐规则

  1. 每个结构体有两个属性
    • 自身内存大小。
    • 最大基本数据类型。
  2. 结构体在复合结构体中的的起始位置只要是最大基本数据类型的整数倍即可,就已经可以完成基本数据的内存对齐了。
  3. 复合结构体的总大小时最大基本数据类型的整数倍即可。
struct Inner {
    short a;   // 2字节
    double b;  // 8字节
};
//总内存16,最大基本类型8
struct Outer {
    char c;         // 1字节
    struct Inner d; // 内嵌结构体
    int e;          // 4字节
};
//规则1:1 + 7(padding) + 16 + 4 =  28
//规则2:28 + 4(padding) = 32

三、为什么要内存对齐

现代计算机的处理器通常以字节、字、双字等块为单位访问内存。如果数据未对齐,处理器可能需要多次内存访问才能获取一个完整的数据。例如,当一个4字节的数据(如int)存储在一个非4字节对齐的地址上,处理器可能需要进行两次内存读取来获取完整的数据,而如果数据是对齐的,处理器只需一次访问即可。因此,内存对齐可以避免不必要的内存访问,从而提高访问效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值