结构体内存对齐详解

目录

结构体对齐:

为什么要进行内存对齐?


关于结构体的详解文章:C语言结构体详解_结构体变量和结构体类型举例-CSDN博客

结构体对齐:


存储的时候和当前存储的成员类型字节大小和默认对齐数比较,取小值
存在该对齐数的整数倍位置
即存a的时候,和a的对齐数比;存b的时候和b的对齐数比
而总体的最后的结构体的大小,要看最大对齐数的整数倍
这最大对齐数是结构体内所有变量的对齐数,取最大值和默认对齐数比,取小值
二者要区分开来

为什么要进行内存对齐?


一般来说,进行内存对齐是为了提高效率
那么,问题来了:
是怎么提高效率的?

同时在思考这个问题之前,先思考一个问题:
如果不进行内存对齐,会怎么样?又或者说,效率是怎么样的低?低在哪里?
我们对不内存对齐进行分析一下:
假设两个变量:char i  和  int a


很明显,如果不进行内存,就是5个字节
那么,问题来了,怎么访问?
首先,我们要明确一个问题:
那就是计算机是怎么访问数据的?
注意,计算机访问数据只能访问4/8个字节
为什么?
因为硬件的问题
计算机只有32根线或者64根线
每一根线代表一个电信号,要么1,要么0
32根线就是32位,4个字节;64根线就是64位,8个字节
那,为什么只能访问4个或者8个呢?
多了不行,难道少了不行吗?
我访问3个行不行?2个行不行?1个行不行?
可以,没问题。
但是,一次最低消耗要么是32位(4字节),要么是64位(8字节)( 我总不能减掉几根线吧?)
既然最低消耗是那么多,总不能浪费吧?
例如,你只想喝一口水,要扔一个桶到井里打水,你不会真的只打一口水吧?
那么大个桶,别浪费啊,利用到底啊,直接打一桶岂不更好?
所以规定访问的时候,要么4字节要么8字节
所以,如果不进行内存对齐:(如果是32位机器)


访问第一个char,一个字节,只需要访问一次
访问第二个元素int,四个字节,但是注意,只能从0-3访问四个字节,或者从4位置开始往后访问4-7四个字节
此时,访问第二个int类型的数据,就需要访问两次:
为什么?
第一次访问,int只拿到了前3个字节
还少一个字节,需要访问第二次:拿到int的后1个字节
再将两个部分拼凑在一起,组成完整的int数据
别的不说,光是这个步骤,就感觉贼蛋疼,很不爽、不干脆,非常难受
难受就意味着不简单,不简单就意味着复杂,复杂就意味着成本高

所以,不进行内存对齐,访问效率就很低
底在哪里?低在硬件处理的局限性

而如果进行了内存对齐
第一个数据char占据4个字节,第二个数据int占4个字节
都只需要访问一次,效率更快,没有多余的处理

指定对齐数:#pragam back(对齐数)
 

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/443726.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PodMan容器技术

容器 容器技术 软件应用通常依赖于运行时环境提供的系统库、配置文件或服务。传统上,软件应用的运行时环境安装 在物理主机或虚拟机上运行的操作系统中。 然后,管理员在操作系统上安装应用依赖项。 在RHEL中,诸如 RPM 等打包系统可协助管…

Docker MySQL 报 2059 错误:认证插件 ‘caching_sha2_password‘ 无法加载

使用docker部署的mysql8.0.29再使用Navicat连接myslq报错Authentication plugin ‘xxxxxxx’ cannot be loaded:XXXXXX (无法加载身份验证插件) 原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规…

嘉绩咨询:八位一体产业创新,赋能品牌新零售

探索新零售领域不断创新高峰的嘉绩咨询在今天全面展现了其“八位一体”产业创新模式,该模式旨在为新零售品牌提供全方位的赋能服务。立足于广州的企业战略导航专家,吹响了帮助中国品牌实现全球化发展的号角。 嘉绩咨询的核心业务涵盖招商教育、招商落地、…

防火墙IPSEC VPN实验

一、实验拓扑 二、实验要求 在上一个实验的基础上增加一条: 在FW5和FW3之间建立一条IPSec通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 三、实验配置 此实验是根据上一个实验拓展,所以前面的配置可以看之前的文章。 先配置FW1…

【毕业】 医药药店销售管理系统

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

手写简易操作系统(三)--加载Loader

前情提要 上一节我们讲了如何启动计算机,这一节我们讲如何加载内核,内核是存在于硬盘上的一段程序,要加载这段程序,那么必然需要从硬盘上读取数据,这里我们就需要使用 ATA PIO 模式 根据ATA规范,所有符合A…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

WordPress 从入门到精通【设置 WordPress】

前言:为方便演示,前几张图使用 Playground 环境截取 如果你还不会部署WordPress,请看下面的链接并使用雨云可视化构建一个WordPress站点: 超简单EP面板搭建WordPress网站教程 - 风屿岛 10 (biliwind.com) 进入仪表盘 在搭建完…

C++内存管理篇

文章目录 1. C/C内存分布2. C中的内存管理方式3. operator new和operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new) 1. C/C内存分布 C语言中,为了方便管理内存空间,将内存分成了不同的区域,每个区域管理不同的数据…

mysql-视图,创建表,存储过程,循环,判断实操命令

数据库操作命令在IDEA工具database的console命令 数据库表结构与视图 事务隔离级别RR(REPEATABLE-READ)解决不可重复读演示 mysql-RR隔离级别 -- 查询隔离级别 select transaction_isolation;-- 设置隔离级别 set session transaction isolation level …

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

P9238 [蓝桥杯 2023 省 A] 翻转硬币(杜教筛+莫比乌斯)

题目&#xff1a;https://www.luogu.com.cn/problem/P9238 思路&#xff1a; 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algo…

信息抽取在旅游行业的应用:以景点信息抽取为例

开源项目推荐 今天先给大家推荐一个开源项目&#xff0c;多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口&#xff0c;功能强大&#xff0c;欢迎体验。 https://gitee.com/stonedtx/free-nlp-api 场景描述 在旅游行业…

酷开科技暖心推荐 酷开系统壁纸模式带来独特视觉享受

一款好看的壁纸能够让人眼前一亮&#xff0c;酷开科技倾心打造的酷开系统壁纸模式&#xff0c;以其独特的美学设计和视觉享受&#xff0c;为消费者提供了一种全新的使用体验。 首先&#xff0c;酷开系统壁纸模式的视觉效果十分出色。它采用了高清的图像质量和细腻的色彩渲染&a…

jvm堆概述

《java虚拟机规范》中对java堆的描述是&#xff1a;所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象)&#xff0c;java内存管理的核心区域 java堆区在jvm启动的时候就被创建&#xff0c;空间大小确定。是jvm管理的最大一…

智能革新:2024年AI辅助研发的挑战、机遇与未来展望

引言 在进入2024年的门槛时&#xff0c;我们站在了一个科技飞速发展的新纪元&#xff0c;其中&#xff0c;人工智能&#xff08;AI&#xff09;的持续进步和应用扩展无疑是推动这一变革的强大动力。AI辅助研发&#xff0c;作为将人工智能技术应用于科研和产品开发过程的一种模…

把握机遇:2024年游戏行业春招提前批全攻略

当前&#xff0c;国内游戏行业正处于高速发展期&#xff0c;各大游戏公司对应届毕业生的人才需求十分旺盛。这一趋势不仅为即将步入职场的学生们提供了广阔的就业前景&#xff0c;也为游戏产业的创新和多元化发展注入了新鲜血液。 在这样的大环境下&#xff0c;2024年春季提前批…

基于qt的图书管理系统----05其他优化

参考b站&#xff1a;视频连接 源码github&#xff1a;github 目录 1 优化借阅记录显示2 时间显示为年月日3 注册接口 1 优化借阅记录显示 现在只能显示部分信息&#xff0c;把接的书名和人的信息全部显示 在sql语句里替换为这一句即可实现查询相关联的所有信息 QString str…

html--彩虹爱心

文章目录 js内容cssreset.min.cssstyle.css html内容 js内容 const colors ["#e03776","#8f3e98","#4687bf","#3bab6f","#f9c25e","#f47274"]; const SVG_NS http://www.w3.org/2000/svg; const SVG_XLINK &q…
最新文章