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

【概念辨析】结构体内存对齐

一、什么是结构体内存对齐

        是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。

        通过这种方法可以使得机器访问效率加快,也可以使得平台一致性变高。

二、结构体对齐的规则

有两组代码:

#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;struct A
{char a;int b;char c;
};
struct B
{char a;char b;int c;
};int main()
{cout << sizeof(A) << endl;cout << sizeof(B) << endl;return 0;
}

 

由此我们可以猜测是结构体的内存对齐发挥了作用。 

结构体内存对齐的规则:

1.对于每个成员变量找出它们的对齐数

        从成员中找出一个占字节数最大的,再与默认对齐数进行比较,这两个数中去一个较小值。

2.再找到一个最大对齐数

        这个最大对齐数(默认对齐数 与 所有成员变量类型最大的,两数中去一个较小值)是用来确定最后的结构体的大小,完成第一步,将所有成员变量存储在该区的地方以后,需要再根据这个数来确定结构体的总大小。(给这个数乘整数,让所有成员能够放得下)

示例:

 

 

 三、补充

        1.改变结构体默认内存数的方法:

#pragma pack()  //恢复默认对齐数
#pragma pack(x)  //x是想修改的默认对齐数

         2.第一个成员变量始终是对齐在与结构体偏移量为0处的地址(也就是相对于结构体来说是0地址处)

         3.节省空间的技巧是:使得占空间小的变量集中在一起

         4.内存对齐的意义:用空间换时间(机器访问效率提升)

http://www.lryc.cn/news/27188.html

相关文章:

  • pg mysql oracle 中的schema
  • 电脑快捷方式删除文件后四种找回方法
  • Session会话管理
  • 极智开发 | ubuntu源码编译cuda版opencv
  • umi学习(umi4)
  • EasyPoi的excel模板预览与下载、导出简单/复杂数据
  • 收个滴滴Offer:从小伙三面经历,看看需要学点啥?
  • Spark Shuffle解析
  • Qt 解决程序全屏运行弹窗引发任务栏显示
  • 【进阶】2、搭建K8s集群【v1.23】
  • 11面向接口编程(下):一切皆服务,服务基于协议
  • 不要以没时间来说测试用例写不好
  • day57-day58【代码随想录】二刷数组
  • 【NLP】自动化计算文本文件TTR的bash脚本
  • 蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)
  • Ubuntu 新人上手 Microk8s 指南
  • 初阶C语言——实用调试技巧【详解】
  • Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)
  • js拷贝数组对象:浅拷贝深拷贝
  • 【C++】string类的使用
  • 微服务架构简介
  • 【Spring源码】AOP的开端:核心对象创建的准备工作
  • 新号涨粉22w,搞笑博主再次爆火,小红书近期创作趋势是什么?
  • 【C++】30h速成C++从入门到精通(内存管理、函数/类模板)
  • 自动驾驶决策概况
  • 金山轻维表项目进展自动通知
  • 基于上下文分析的 Python 实时 API 推荐
  • 软件测试-接口测试-代码实现接口测试
  • 中村成洋《垃圾回收的算法与实现》PDF 读书笔记
  • docker 网络模式