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

网站首页二级下拉框怎么做盘锦网站建设流程

网站首页二级下拉框怎么做,盘锦网站建设流程,广州天拓做网站吗,小程序如何制作开发这一章节主要巩固一下学习C/C时内存对齐相关的内容! 文章目录 什么是内存对齐?为什么要有内存对齐?如何进行内存对齐?致谢: 什么是内存对齐? 这里不提及一堆啰嗦概念,就结合实际出发&#xff0…

这一章节主要巩固一下学习C/C++时内存对齐相关的内容!

文章目录

  • 什么是内存对齐?
  • 为什么要有内存对齐?
  • 如何进行内存对齐?
  • 致谢:

什么是内存对齐?

这里不提及一堆啰嗦概念,就结合实际出发!在开发C++程序时,与内存接触较多,当定义一个结构体时,我们以为他是XX字节,结果不是,请看下图:

在这里插入图片描述

新手刚学习肯定会认为他是6字节,int四个字节,char是1字节,4+1+1=6,但是在VS2022 X64平台默认下,我们看看他是多少字节!

当我们把鼠标悬浮在struct名字上就会自动弹出悬浮框,告诉我们是8Byte!这就是内存对齐从而对结构体大小产生的影响!

在这里插入图片描述

其实内存对齐本质上就是,Visual Stdio平台给结构体留了一些空白的Padding间隙!【注意,有时VS的悬浮框的数值不一定准确,可以sizeof打印观看】

为什么要有内存对齐?

先说结论,两个方面:

  • 1、为了读写效率
  • 2、为了平台兼容性

​ 这里需要对计算机体系有个基本了解,但是不废话,咱们大白话直白平铺。当CPU需要读写内存数据,需要通过地址总线、数据总线的辅助,传递地址数据和获取真正内存数据!不同计算机平台这些所谓的总线宽度是不同的!

​ 假设在大多数32位cpu中,所谓这些总线宽度是32位,也就是4字节长度!也就代表真正一次能够读取的数据最多就是4个字节!

​ 上一段说,既然一次最多读取4个字节数据,那地址的编号,咱们就4个字节依次对地址编号,第1个4个字节内存的地址叫0,第2个4个字节内存的地址叫1,依次递增,如下图:

在这里插入图片描述

既然都已经编号成这样了,那你说他可能会访问所谓的0.5地址编号的内存吗?所以这里有两种取舍:

  • 1、压根不支持这样读写
  • 2、支持,但是需要分两次读写

如果是第一种情况,正好解释了内存对齐原因的第二点:为了平台兼容性!因为只支持4Byte对齐的读写,所以不对齐不行啊,这个理由可否?

咱们来看看第二种情况,咱们假设CPU支持,那么如果要读0.5位置的4Byte数据,CPU怎么办?

其实它还是一样不能直接读取不了0.5位置的数据,但是可以读两次,第一次读0编号,第二次读1编号,最后分别都拿一点数据,然后拼起来!如下图示意:

在这里插入图片描述

我们直观的感受到,既要读多次,又要进行数据拆分和拼接的计算过程,很显然,没有一次性直接读出来来的高效!

这也验证了为什么要内存对齐的第一个方面:为了读写效率!

如何进行内存对齐?

​ 这里结合网上的帖子和自己的实验验证,直接给出内存对齐规则以及相应名词介绍!

前置名词介绍:

  • 默认对齐系数
  • 成员有效对齐值
  • 结构体最大对齐值

什么是默认对齐系数?

​ 它是一个数字,每个特定平台的编译器有自己的默认“对齐系数”,这里以Visual Stdio 2022的测试为例,X86默认对齐系数是8,X64默认值是16。

如何查看的呢?通过VS提供的指令:#pragma pack(show) 可以在编译时,作为warning信息显示出,如下图:

在这里插入图片描述

什么是成员有效对齐值?

​ 它也是一个数字,以结构体来说,结构体每个成员都有自己的有效对齐值,计算公式:有效对齐值 = min{默认对齐系数, 变量类型字节长度}!

举个例子:

在这里插入图片描述

简单易懂,因为int类型,字节长度4,所以有效对齐 = min{4, 16} = 4,16是当前平台的默认对齐系数!

什么是结构体最大对齐值?

​ 它也是一个数字,上一节说了,既然结构体每个成员都有一个有效对齐值,那么最大的那个数字就是结构体最大对齐值!

举个例子:

在这里插入图片描述

前置名词介绍完了,咱们上正菜,内存对齐规则:

简单结构体的内存对齐规则:

1、结构体第一个成员的位置偏移为0!

2、结构体非第一个成员的位置偏移,是该成员有效对齐值的整数倍!【因为此限制,自然会和上一变量位置可能有空白Padding】

3、结构体总大小是结构体最大对齐值的整数倍!【因为此限制,结构体末尾是可能存在空白Padding】

举两个例子,辅助大家理解:

例1:

在这里插入图片描述

根据规则3,结构体最大对齐值为4,而如果仅仅三个变量大小和为6字节,所以尾部补充2字节的空白Padding!

例2:

在这里插入图片描述

应用规则2: 考虑第二个变量int i,因为它的有效对齐值为4字节,所以距离第一个成员留有3字节的空白Padding!

应用规则3: 三个成员+3字节Padding,一共是1 + 3 + 4 + 2 = 10字节,而最大对齐值是4字节,所以尾部补充2字节空白Padding!

上述说的都是不存在结构体复合嵌套的情况,其实嵌套了,规则也是类似,但是有一些需要注明的要求,如下:

嵌套结构体的内存对齐规则补充:

1、结构体第一个成员的位置偏移为0!

2、结构体非第一个成员的位置偏移,是该成员有效对齐值的整数倍!

【如果是结构体类型成员,则该成员的有效对齐值是成员对应结构体类型自身的最大对齐值】

3、结构体总大小是结构体最大对齐值的整数倍!

举两个例子,辅助大家理解:

例1:

在这里插入图片描述

T1不多赘述,重点解释下T2中的b成员,也就是嵌套结构体成员类型!

在计算T2的b成员的有效对齐时,它并不是用T1的结构体大小和默认对齐值16取最小值,而是用该结构体类型的最大对齐值和默认对齐值取最小值,也就是T1的最大对齐值8和16取最小值为8作为b成员的有效对齐值

例2:

在这里插入图片描述

大家好好品味品味吧!

致谢:

​ 今天的学习就到此为止啦,喜欢的小伙伴点点关注+赞哦!有问题及时留言!感谢大家Thanks♪(・ω・)ノ!我是火火,火一般的男人!

http://www.yayakq.cn/news/376586/

相关文章:

  • 连接国外网站做端口映射服务专业的网页制作服务
  • 宁波网站建设速成什么做网站做个网站一般要多少钱啊
  • 自己做的网站显示不安全怎么回事开发软件需要什么技术
  • 长兴网站建设列举企业网站建设有哪些好处湛江网站建设方案优化
  • 社交型网站首页面设计分析湖北建设厅网站怎么打不开
  • 建设网站基础知识做搜狗网站快速排名软
  • 企业网站案例公司浙江建筑信息网港
  • 邵阳建网站多少钱网站建设竞标
  • 网站开发连接数据库网站建设公司如何
  • 会计网站建设意义昆凌做的广告买化妆品网站
  • 建站行业的发展前景网站前端静态模板下载
  • 毕设做网站些什么比较简单网站建设刂搜金手指下拉贰肆
  • 如何做汽车的创意视频网站网站改版原则
  • 网站底部技术支持网络营销机构官方网站
  • 绵阳住房和城乡建设局网站海曙区网站开发培训
  • 佛山网站建设策划设计师35岁后的出路
  • 网站建设费用估计wordpress页面设置
  • 山东省建设执业师之家官方网站招聘网站建设深圳
  • 成都网站建设重庆最加科技自贡企业网站建设
  • iis5 新建网站邢台推广网站建设电话
  • 电子商务网站建设合同样本桂林同城网站
  • 上海做兼职的网站注册商标需要什么条件
  • 成品网站w灬源码伊园长沙网络推广服务
  • 上海做网站哪家便宜网站建设客户资料收集清单
  • 惠州淡水网站建设公司wordpress编辑页面
  • 手工制作网站网站程序 wap pc 同步
  • 北京网站设计确保代码符合w3c解析域名就可以做网站
  • 有什么手机做网站的网站管理助手v3
  • 自己如何建企业网站不花钱网站怎么做
  • 招聘网站开发的公司成都网站建设制作价格