当前位置: 首页 > news >正文

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

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

  • 一、本文内容与前置知识点
    • 1. 本文内容
    • 2. 前置知识点
  • 二、内存对齐规则
    • 1. 自然对齐
    • 2. 复合结构体的内存对齐规则
  • 三、为什么要内存对齐

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

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字节对齐的地址上,处理器可能需要进行两次内存读取来获取完整的数据,而如果数据是对齐的,处理器只需一次访问即可。因此,内存对齐可以避免不必要的内存访问,从而提高访问效率。


http://www.mrgr.cn/news/25021.html

相关文章:

  • STL容器真的好用吗
  • 海思SD3403(21AP10, 108DC2910 )4K60 的 ISP 图像处理能力,4Tops INT8算力
  • 动态规划01背包问题
  • 鸿蒙-沉浸式pc端失效
  • dropbear交叉编译
  • 【linux-Day2】linux下的基本指令
  • docker_快速部署flask架构下的web容器
  • 基于“硅基”的AI数字人要闻直播
  • 最小二乘估计
  • qt绘制时钟
  • QGIS 如何连接空间库,并实时编辑空间表?编辑后库表如何刷新,保证是最新数据?
  • 拱式桥安全结构健康监测解决方案
  • 机器学习 第14章 概率图模型
  • 【Linux 从基础到进阶】自动化部署工具(Jenkins、GitLab CI/CD)
  • 信息安全基础知识-1
  • shell脚本控制语句
  • 使用 SpEL 替换中文时出现了 java.lang.IllegalStateException: Cannot handle 错误
  • 蓄电池制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • ICM20948 DMP代码详解(15)
  • 深入理解Docke工作原理:UnionFS文件系统详解