c++ int 转 short_C/C++结构体内存对齐

在面试或工作中,经常会遇到内存对齐的问题。这里结合我的理解谈一谈对内存对齐的理解。

1. 为什么要内存对齐,不对齐会怎么样?

内存中存放数据是为了给CPU使用,CPU访问内存数据时会受到地址总线宽度的限制,也就是一次能从内存中拿多少数据到CPU(这里我们忽略CPU高速缓存)。而且,CPU从内存中获取数据时起始地址必须是地址总线宽度的倍数(我们用的intel CPU能处理不对齐的情况,某些CPU不能处理,即遇到不对齐程序会崩溃...)。

例如:CPU地址总线是64位(bit,8字节),当一个int(4字节)存储到地址: 0x06 时,CPU如何获取这个int值?

第一步:读取0x00~0x08 8个字节,然后保存后两个字节到 int 的前两个字节。

第二步:读取0x08~0x0F 8个字节,然后保存前两个字节到int的后两个字节。

3e852638f195d811f25c3788f02a758c.png
图1-内存访问

上面的例子可以看到,从内存中读取一个int到CPU中需要从内存中读取两次。这样大大降低了执行的效率,如何提升性能? 答案就是内存对齐!

2. 内存对齐的单位是什么?

通过上面的分析,知道内存对齐的目的是为了让CPU能一次获取到数据,从而提升性能。学过汇编会了解,CPU只能使用基本类型,char, short, int, long, float, double 等,不能使用数组或结构体等复合类型(汇编中并没有一个指令能直接存取一个struct或数组)。所以:内存对齐的单位是基本类型,目标是让CPU能一次获取到基本类型的值。

3. 如何进行内存对齐?

通过上面的介绍,我们可以得出:

a. 内存对齐是指,变量地址的对齐,而不是变量大小的对齐。变量地址的对齐是指变量地址 对 变量大小求模为0。

b. 结构体中每一个成员都要求是内存对齐的。

c. 结构体中的数组,按数组的类型对齐。

4. 如何计算内存对齐

分析内存对齐,只需要记住上一个小节中:变量地址的对齐是指变量地址 对 变量大小求模为0。数组以数组本身的类型来计算,例如:char c[5] 按 char 类型大小计算对齐,double d[22] 按 double 类型大小计算对齐。

ea25f1d8d527feda79d7429221f4ba7a.png
图2-示例程序

8050b584ad2dd94704294354221f02a7.png
图3-运行结果

通过这个示例,仔细想想,内存对齐就很简单了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jakob slam_Jakob Nielsen针对用户界面设计的第二种可用性启发法

jakob slamIn the pursuit of providing great user experiences, it’s imperative that digital products are evaluated. A 为了提供出色的用户体验,必须对数字产品进行评估。 一个 heuristic evaluation is essential to delivering great user experiences. I…

微软Office 365正式上架Mac App Store

今天,Office 365正式在Mac App Store上架,Mac用户可以轻松下载Word,Outlook,Excel,PowerPoint,OneNote以及整套微软的热门应用程序。用户还可以从应用程序内订购Office 365。苹果全球开发者关系高级主管Sha…

一文搞懂浏览器原理

大家好,我是若川。最近这几年,云计算的普及和 HTML5 技术的快速发展,越来越多的应用转向了浏览器 / 服务器(B/S)架构,这种改变让浏览器的重要性与日俱增,视频、音频、游戏几大核心场景也都在逐渐…

dataframe中将一列数据切分成多列

为什么80%的码农都做不了架构师&#xff1f;>>> 原sheet中数据 目的 将【备注】列切分成【key】列和【value】列 Python sheet[key] sheet[备注].str.extract(r(_.*(?\u503c))) sheet[value] sheet[备注].str.extract(r((?<).*))结果 参考 pandas.Series.st…

matplotlib可视化_EDA:Geopandas,Matplotlib和Bokeh中的可视化

matplotlib可视化Nowadays, everyone is immersed with plenty of data from news sources, cellphones, laptops, workplaces, and so on. Data conveys with tons of information from different data variables like date, string, numeric, and geographical format. How t…

小技巧!CSS 整块文本溢出省略特性探究

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天的文章很有意思&#xff0c;讲一讲整块文本溢出省略打点的一些有意思的细节。点击下方卡片关注我&#xff0c;或者查看源码系列文章。文本超长打点我们都知道&#xff0c;到今天&#xff08…

寒假作业3:抓老鼠啊

7-1 抓老鼠啊~亏了还是赚了&#xff1f; &#xff08;20 分&#xff09; 某地老鼠成灾&#xff0c;现悬赏抓老鼠&#xff0c;每抓到一只奖励10元&#xff0c;于是开始跟老鼠斗智斗勇&#xff1a;每天在墙角可选择以下三个操作&#xff1a;放置一个带有一块奶酪的捕鼠夹(T)&…

笔记本移交_创建完美的设计移交

笔记本移交重点 (Top highlight)Design specifications (specs) are guidelines that developers will use to implement a design. Think of an architect providing building blueprints to the construction team. Many designers think of specs as mindless zombie work. …

大手笔,送¥1599的Apple AirPods Pro和独家礼物等

大家好&#xff0c;我是若川。为感谢公众号读者们长久以来的支持&#xff0c;本次我联合几位前端界大佬给大家送超级福利了。除了联合福利之外&#xff0c;每位前端大佬还带了专属礼品送给大家&#xff0c;所有抽奖均可重复参与、可重复中奖&#xff0c;详情见下文每个公众号的…

jQuery1.4新特性

1. 传参给 jQuery(…) 之前&#xff0c;jQuery可以通过 attr 方法设置元素的属性&#xff0c;既可传属性的名和值&#xff0c;也可以是包含几组特定 属性名值对 的 对象。在 jQuery 1.4 中&#xff0c;你可以把一个参数对象作为第二个参数传给 jQuery 函数本身&#xff0c;同时…

一个好的设计师_是什么让一个好的设计师

一个好的设计师重点 (Top highlight)The design manager role has grown considerably over the past five years. As design has been recognised as a business value-driver and organisations have increased their design maturity, we’ve seen lots more design managem…

相见恨晚的一款前端布局神器!

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天给大家推荐一款非常实用的前端页面布局神器&#xff0c;点击下方卡片关注我&#xff0c;或者查看源码系列文章。页面和布局是一门前端程序员的必修课&#xff0c;css 从来也不是停留在面试八…

unreal无损音乐百度云_将网易云音乐专用的无损音乐格式转换成全平台通用的无损格式...

前几天发现网易云音乐的ncm格式很坑爹&#xff0c;由于网易云的部分音乐采取了这种流媒体平台模式&#xff0c;这种格式的歌曲下载到设备本地以后只有在网易云音乐的app上面才能播放&#xff0c;而且还要在会员生效期间才能播今天网易云弄出一个ncm&#xff0c;明天百度音乐来一…

ux和ui_首先要做的— UX / UI案例研究

ux和ui休息一下&#xff01; (Get some rest!) After four weeks of four-day design sprints each week, I welcomed the opportunity to work on this 9-day design challenge. With this also being an individual project, I allocated 50% of my time on the UX process a…

Vue2 彻底从 Flow 重构为 TypeScript,焕然一新!

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天分享一篇技术热点&#xff0c;众所周知&#xff0c;前不久vue3不打算支持IE11&#xff0c;vue2将支持composition API&#xff0c;现在vue2用ts重构&#xff0c;试问&#xff1a;还学得动嘛…

【抽奖】若川诚邀你加前端群,长期交流学习~

最近有许多读者朋友关注了我&#xff0c;加我好友没有来得及拉群交流。另外偷偷告诉你&#xff1a;公众号回复 411&#xff0c;参与抽奖&#xff0c;送极客时间100元以内的课程&#xff0c;今晚八点开奖&#xff0c;必须开奖前加了我的微信&&像是前端&&关注了我…

帝国cms重置管理员_重新设计《纽约时报》 CMS飞行员

帝国cms重置管理员1.什么是飞行员&#xff1f; (1. What Is Pilot?) For 10 weeks, I joined The New York Times’s Story Formats team as a Product Design Intern. Partnered with technology intern Shormie Faruque, we were tasked with redesigning Pilot.大约十个星期…

昆山万象汇机器人_昆山十镇,在售新盘汇总

陆家建伟国际汽车城&#xff0c;均价 7500 元/㎡美吉特家居广场&#xff0c;均价 17000 元/㎡美吉特灯都&#xff0c;均价 17000 元/㎡花桥绿地象屿苏河公园&#xff0c;均价 22950 元/㎡凯德都会新峰&#xff0c;均价 21500 元/㎡越洋国际&#xff0c;均价 18000 元/㎡浦西玫瑰…

JavaScript ES2021 最值得期待的 5 个新特性解析

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天分享一篇关于ES2021的5个新特性。点击下方卡片关注我&#xff0c;或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列在写本文时&#xff0c;本文提到的新的 JavaScript …

latex排版基础_排版基础分类

latex排版基础重点 (Top highlight)There are many parts to creating a beautiful, functional, memorizing design. That’s what all User Experience designers set out to do. You need to consider your users, strategy, features, content, color, and so much more. A…