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

济宁 网站建设上海app开发

济宁 网站建设,上海app开发,关于古风的网站建设项目,手机端网站开发书籍每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 通过本章你能具体的了解到,如何计算出一个类的大小,并且了解其中到底是如何算的以及了解到为什么需要内存对齐这种算&#xff0…


每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”

绪论​:
通过本章你能具体的了解到,如何计算出一个类的大小,并且了解其中到底是如何算的以及了解到为什么需要内存对齐这种算!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。

类对象的大小

  • 类对象的大小来说仅由成员影响,成员函数不影响:
  • 因为:在C++中成员函数实际上是在编译时被解析并绑定到特定的对象上,通过对象来调用这些方法并不会增加对象本身的存储需求。
  • 具体来说,在创建一个类的实例时,只有成员变量会被分配内存空间,而成员函数则存在于程序的代码段中。即使增加了更多的内联或非内联成员函数,也不会改变单个类实例所占用的内存大小。
    ——
    但注意的是当要计算一个类的大小的时候,并不是直接通过查看类中成员的类型和个数,最终算出的所占字节决定的决定的!
    ——
  • 而是:成员在不同类型和个数影响大小的基础上引入了内存对齐

那内存对齐到底是什么?让我们接着往下看!

首先理解为什么要内存对齐

  1. 不是所有的硬件平台都能访问任意地址上的任意数据的:某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。(如取:int的4byte)
  2. 性能原因:因为假如在没有内存对齐的情况下:当一个类中刚好有两个成员:char 、int
    1. 此时不进行内存对齐,那么 char的1byte和int的4byte将会连在一起
    2. 假设要取其中的int,那么读取过程中从前往后的找int(每次读取4byte),但因为是char和int连着存放:
    3. 其中会有3byte和char连在一起(读取了前4byte,因为存在一些int,但其中第1byte并不是int的,也代表还没读取完)
    4. 所以还得继续读取还剩的1byte,那么就需要再一次进行读取,才能将int读完
    5. 也就代表需要读取两次才能将一个int读取完
    6. 但假如使用了内存对齐,将int对齐到倍数位置,就能很方便的不需要过滤char的,直接一次性读完
  3. 总体来说:结构体的内存对齐是拿空间来换取时间的做法

话不多说那么我们就快速的来看内存对齐的规则到底是什么,这么算出类对象大小


对齐规则

  • 首先我们理解对于变量,他们都是放到栈区的:
  • 而栈区:其实可以把他想象成一个竖起来的数组!
  1. 第一个参数直接放入,对齐到偏移量为0的位置
  2. 从第二个成员变量开始要对齐到偏移量为自身对齐数的整数倍
    1. 自身对齐数 = 判断自身大小 和 系统默认对齐数 进行比较,取较小值为对齐数(有点抽象先看着后面有例子!)
  3. 结构体的总大小:最终要为所有成员变量中的取过的最大对齐数的整数倍
  4. 如果有镶嵌结构体
    1. 那这个最大对齐数的判断也要包括所镶嵌的结构体 内的 成员的对齐数
    2. 并且这个镶嵌结构体也要对齐到自身的最大的对齐数上(在外部的结构体内)
  5. 附:在Linux gcc 环境下没有默认对齐数 对齐数就是其本身大小、计算偏移量的宏offsetof(类名,成员名)

例子结构如下:

struct/class S1
{char c1;int i;char c2;
};

分析:

  1. 首先将 c1(1byte) 直接放到 0 偏移量处,并占1byte
  2. 从第二个开始就要把成员,放到 自身对齐数的整数倍处!
    1. 也就是 i (int)放到自身对齐数整数倍处:自身对齐数 = 4 (取 自身大小4 和 默认对齐数8 的较小值)
    2. 那么从 就要放到 3 偏移处(从0开始:0 ~ 3 = 4),并占4byte(此时总大小就是 0 ~ 3 + 4 = 8)
    3. 在放一个 c2 ,对齐数为 1(1 > 8),此时总大小就占了9byte了
  3. 最终的大小等于:在成员中自身对齐数最大的数4的整数倍( 1 4 1)
  4. 所以还得让总大小值是4它的倍数:9 - > 12大小
    栈的存储过程图:
    在这里插入图片描述
struct name
{int a;char b;int c;int d;
};

4 + 1 + 3(偏移)+ 4 + 4 = 16
在这里插入图片描述


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量C++细致内容,早关注不迷路。


文章转载自:

http://DKzI0WSp.mbzLg.cn
http://aN0yXynZ.mbzLg.cn
http://5R5dIfNX.mbzLg.cn
http://KIAicVZI.mbzLg.cn
http://2de08eMk.mbzLg.cn
http://PVlAdjnT.mbzLg.cn
http://i9F3J3ue.mbzLg.cn
http://4qqgpq7n.mbzLg.cn
http://6yAAgHrR.mbzLg.cn
http://WU4TrSxG.mbzLg.cn
http://nmoMMXjY.mbzLg.cn
http://x7NCS4G6.mbzLg.cn
http://47DWiEWI.mbzLg.cn
http://sXks5S3t.mbzLg.cn
http://PJqic8r8.mbzLg.cn
http://VB8vAdn9.mbzLg.cn
http://UpI2KKQe.mbzLg.cn
http://JodyrBml.mbzLg.cn
http://xzYNePsT.mbzLg.cn
http://RKO6q5S5.mbzLg.cn
http://dVaB9upi.mbzLg.cn
http://Az1hK1lo.mbzLg.cn
http://N7iRpHf5.mbzLg.cn
http://n1u5gvI9.mbzLg.cn
http://NXnyXjZX.mbzLg.cn
http://uh94qK1c.mbzLg.cn
http://Luq6XYvU.mbzLg.cn
http://euQzVhxU.mbzLg.cn
http://yCS9Jpdm.mbzLg.cn
http://mlas7Qmy.mbzLg.cn
http://www.dtcms.com/wzjs/760218.html

相关文章:

  • 那种登录才能查看的网站怎么做优化新像素ui设计学费
  • 阿里巴巴网站建设哪家好500强企业网站有哪些
  • 福建住建设厅官方网站什么是外包公司?
  • 沧浪公司网站建设电话WordPress淘客转链插件
  • 电话销售做网站长沙网站优化收费
  • 顺企网网站建设如何申请自己的网站空间
  • 微信分销网站建设比较好如何开网页游戏
  • 网站的flash怎么做的设计手机网站内容模块
  • 网站建设行业知乎手机网站建设 广州
  • 服装企业网站模板东莞是什么网站建设
  • 网站建设中什么是一栏如何制作自己的网站图?
  • 泉州外贸网站开发公司织梦网站优化
  • 宁波网站开发定制网站建设新模式
  • 湖南新备案的网站如何免费创建个人网站
  • 济南国画网站济南网站建设公司wordpress 插件 销量
  • Wordpress ajax 相册沈阳seo关键词排名优化软件
  • 石家庄营销型网站建设费用网站建设的要求有哪些
  • 网站负责人核验照织梦微信网站模板
  • 简易app开发软件优化大师是什么意思
  • 成都营销网站设计微信开发者工具的介绍
  • 聊城定制化网站建设广州网页推广公司
  • 出售自己的网站网店运营规划
  • 一键做网站的软件沭阳网站设计
  • 贵阳网站建设哪家公司好上海建设教育网站
  • 国内优秀网站欣赏注册域名和建立网站的过程
  • 岳阳博物馆网站wordpress 手机菜单栏插件
  • 佛山建设网站公司哪家好单页的网站怎么做
  • 比较好的网站建设技术开发wordpress 转载
  • 威海电子商务网站建设沧州外贸推广公司
  • 系部网站建设中期检查表上海p2p网站建设