游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

经典易错的结构体内存对齐问题

  今天给大家带来一道经典、易错的关于C语言结构体内存对齐的题目:求32bit环境下以下结构体所占的字节数:typedefstructteststruct{chara;shortb;charc;intd;chare;}teststruct;
  请说出你的答案:
  下面看一下实际测试情况:1、测试代码:WeChat:嵌入式大杂烩includestdio。htypedefstructteststruct{chara;shortb;charc;intd;chare;}teststruct;intmain(void){teststructtests;printf();printf(testsaddr。8x,tests);printf(tests。aaddr。8x,tests。a);printf(tests。baddr。8x,tests。b);printf(tests。caddr。8x,tests。c);printf(tests。daddr。8x,tests。d);printf(tests。eaddr。8x,tests。e);printf(sizeof(tests)d,sizeof(tests));printf();return0;}2、运行结果
  在32bit环境中,该结构体所占的字节数为16。答对了吗?
  运行结果打印输出了很多重要的信息,从结果往前分析思路应该很清晰了吧?不清晰也没关系,下面我们一起来分析分析:3、分析
  在分析这个问题之前,我们先记住关于结构体内存对齐的三条原则:
  (1)结构体变量的起始地址能够被其最宽的成员大小整除。
  (2)结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节。
  (3)结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节。
  分析这个问题我们就不考虑编译器可以指定对齐大小的情况了。在32bit环境中,一般默认的对齐大小是4。下面我们根据这三条原则来分析,并得出如下示意图:
  从这张图中我们应该可以很清晰地看出整个结构体变量的内存占用情况。如果还看不明白的朋友可阅读下面的解释(有点啰嗦,已经看明白的就不用看了):
  从上例的结果中,我们结构体变量tests的起始地址为0x0028ff30,能够被其最宽的成员(int类型的d成员,占4个字节)整除,符合第(1)条原则。
  a成员的地址即为结构体变量的起始地址0x0028ff30,排在a后面的是short类型(两个字节)的b成员。
  根据第(2)条规则,显然b的地址不能从0x0028ff31开始,则编译器会在b成员的前一个成员(a成员)后边补1个空白字节,即b的的地址为从0x0028ff32,符合规则(2)。
  b成员占两个字节,两个字节之后的地址为0x0028ff34,而c成员为char类型(1字节),则根据规则(2),c成员会存放至地址0x0028ff34处。
  c成员占1个字节,1个字节之后的地址为0x0028ff35,排在c后面的是int类型(4个字节)的d成员,显然不能满足规则(2)。
  编译器会在d成员的前一个成员(c成员)后面进行字节填充,这里必须填充3个字节才能符合规则(2),此时d会存放至地址0x0028ff38处。
  d成员占4个字节,4个字节之后的地址为0x0028ff3c。根据规则(2),e成员可从该地址开始存放。
  此时a空白字节bc空白字节de所占的字节总数为13个字节,而结构体最宽的成员(int类型的d成员)所占字节数为4字节。显然不能满足规则(3),编译器会在e成员后面填充3个字节。即整个结构体变量tests所占的总字节数为16字节。4、实际应用
  (1)用保留变量替代填充字节
  实际应用中我们可以上面的结构体变量改为:typedefstructteststruct{chara;charreserve0;保留成员shortb;charc;charreserve1〔3〕;保留成员intd;chare;charreserve2〔3〕;保留成员}teststruct;
  我们已经知道了编译器会自动给我们的结构体变量填充一些空白字节,这些填充字节我们是看不到的,是隐性的。在结构体变量占用相同内存的情况下,我们可以显性的表示出这些填充字节,即创建一些保留成员。
  这样当我们需要给这个结构体添加一些成员时,我们可以把保留的成员替换为实际的成员。这样在一定程度下有利于我们节省内存空间。
  (2)调整结构体成员的位置
  从上面的分析中我们知道编译器会根据我们结构体成员的排列来进行空白字节填充以达到对齐的效果。那么我们自己进行手动对齐一些成员,那就可以节省一些空间了。比如把上面的我们的teststruct结构体成员的顺序改为:typedefstructteststruct{chara;charc;shortb;intd;chare;}teststruct;
  则结构体变量tests所占的字节数变为12字节,即:
  即比原来的16字节省下了4个字节。
  虽然这点优化对于一般的嵌入式应用来说可能没什么必要,但是万一某一天真的需要在某些资源极其受限的嵌入式设备中开发应用,这就是可以优化的一点。
  以上就是本次的分享。这道结构体内存对齐的题目很经典、也很容易出错,是嵌入式C语言笔试、面试题中的高频题目,很有必要弄清楚。
  以上就是本次的分享,如有错误,欢迎指出!谢谢

配17。3英寸屏幕,华硕天选2Plus两款机型不过万,该怎么最近,越来越多人放弃了游戏台式机,而是开始选择游戏笔记本电脑,这其中主要的原因,还是因为台式机显卡价格太贵,很难降到理想的价格,而笔记本上显卡受制于散热问题,基本不会用来拿作他……为什么有的人愿意戴眼镜却不愿意戴助听器?认知问题错误认为助听器是残疾人用品。其实助听器是现在最普遍的、解决听力障碍的有效工具,就像老花眼镜及假牙功能一样。心理问题听力损失现在越来越年轻化,人到中年,……恒驰5距离上市更近一步2月11日,工信部官网发布第353批《道路机动车辆生产企业及产品公告》车辆新产品公示清单,恒大的新能源汽车恒驰5位列名单之中,该车车型长宽高尺寸分别为4725mm1925mm1……中秋换机指南安卓旗舰换机最高抵扣6000元中秋将至,与家人欢聚团圆的同时,有没有想给自己换一台手机的想法?下半年值得买的安卓旗舰好机都在这了。总有一款适合你。vivoX70Pro,它搭载后置四摄,分别是5000W……工信部再度出手,平台互相屏蔽成重点,网友APP乱象更严重互联网作为一个信息传播的媒介,给人们的生活和工作带来了很大的方便。然而给人们带来方便的同时也给我们带来了很大的困扰,很多互联网大加为了争夺市场,作出了很多违背客户意愿的举动。对……vivoNex5携屏下前摄回归,5200120W144Hz,vivo品牌是一家专注于做研发与技术的手机厂商,自从华为开启自研芯片之路后,很多国产厂商也意识到了拥有自己芯片的重要性,vivo也不例外。经过多年的打磨与研发,目前国产手……许家印和姚振华,谁是下一个贾跃亭?房企造的车都翻了跨界造车,似乎都没有什么好下场。乐视贾跃亭跑路去美国,迟迟不敢回来。近日恒大和宝能债务危机持续发酵,许家印和姚振华何去何从,谁将是下一个贾跃亭?1、贾跃亭跑路?最近这些年……鸿蒙OS电池健康系统上线,用户方便多了目前市面上的热销机型,所搭载的系统大致分为三个,谷歌旗下的Android,苹果旗下的IOS还剩下的就是华为的HarmonyOS了,今天我们就来说是华为的HarmonyOS系统,……自动化运维从0到1CICD自动化部署落地分享目录一、CICD简介二、CICD实践过程三、含泪踩坑四、历史文章指路一、CICD简介1、CICD定义ContinuousIntegratio……可控核聚变的实现能使电费大幅下降吗?可控核聚变能够研究成功,主要是其对人类的战略意义重大,重点而不是简单的电费问题。这是因为,首先,可供给人类能源的选择本来就不是很多,石油预计还能够开采几十年,煤炭能够保障几百年……一图看完,小米米粉节优惠活动及新品一览表!2019的小米米粉节将于4月9日0点正式开启,众多小米新品在米粉节正式亮相,同时,米粉节期间众多小米产品也都会有不同幅度优惠。据小米官方透露,2019米粉节总让利额度超过2亿元……全球多站点协同搜索暗物质一个国际研究团队首次发布了使用全球光学磁力计网络(GNOME)搜索暗物质的综合数据,相关成果日前发表于《自然物理学》。根据科学家的说法,暗物质场会产生一种独特的信号模式,这种模……
都是紧凑级MPV,传祺M6和别克GL6的区别在哪里?哪款更值随着二胎政策的放开,很多消费者在换车时会更倾向于MPV车型,因为这不仅能满足一家人的出行,而且在舒适性上也要高于轿车和SUV。从销量方面来看,目前国内市场中销量比较高的家用紧凑……不会吧,不会还有人不知道新能源汽车有专用轮胎吧?相比于传统燃油车,新能源汽车更重,百公里加速更快,静音性更好,但风阻和轮胎阻力对车辆的续航有很大的影响。因此,新能源车需要抓地力更强、承载能力更大,以及较小的滚动阻力和低噪的轮……大数据的从业人数和JAVA的从业人数为什么相差这么大?今年火热的行业,你都知道有哪些吗?其中我们关注得最多的就是IT行业了吧,这个行业自从互联网兴起就开始变的火热,久经不衰。直到现在也依然是唾手可得的火热行业,纵观未来,在现在互联……苹果因包装盒中不标配充电头被罚200万美元!网友罚少了去年,苹果在发布iPhone12时以环保为由取消了手机包装中标配的充电器配件,此举在国内外引起了业内外人士的各种发声。据外媒(Tilt)消息称,由于iPhone12和新版本iP……使用佳能24105mm4L的拍摄体验佳能24105适合拍摄人像吗总体来说佳能241054镜头还是不错的,性价比比较高,是一个恒定光圈为4的标准变焦镜头。拍摄的题材比较广泛:风光、人像、人文纪实、旅游等等。对……2款超高性价比的5G旗舰手机,iPhone12也比不过iPhone12系列最近重磅来袭,它采用了5nm厚度的A14芯片,支持5G网络。并且它的复古外观设计让许多消费者为之心动。不过谁曾想,最近一段时间iPhone12被曝出了大量的……手机电影走进校园,专业电影人分享华为Mate30系列电影四摄日前,在山东大学、四川电子科技大学和四川电影电视学院举行了一次别开生面的活动,那就是三所高校和华为举办了未来传媒人系列之华为视频光影鉴赏活动,活动先后邀请了知名影评人孤烟、谭飞……这十八万人有福了,如果你十年前买了这部手机,现在全额退款最近手机圈子里发生了一件涉及到18。46万人的大事,如果你是这其中之一,那么恭喜你,你可以申请到一笔1999元的无门槛无套路的大红包。这件事还得从十年前说起,2010年8……农村二婚女成为初婚男的抢手结婚对象?过来人娶到就是赚到婚姻是每个人都逃不过的。随着00后的到来,90后成为了结婚的主力军。但是根据调查数据显示,90后人结婚的意愿没有上涨反而下降。在城市里生活的年轻人对结婚的积极性没有那么高,而在……去酒店开一两百块一天的房间,带几十台矿机进去挖矿,一天用他个以目前常见的蚂蚁矿机S19Pro110T来说,蚂蚁矿机机子额定功率3250w,一台机子重量13。2kg。首先以重量来说,在不暴露机子,不变酒店前台发现的情况下……雷军称小米推动了全球手机普及,小米手机影响力到了什么程度2021世界互联网大会上,小米董事长雷军表示,小米推动了移动互联网的发展和全球手机普及,目前小米已经是全球第二大手机品牌。纵然上市后的小米已经忘记初心。纵然MIUl已经沦……微信8。0。14内测更新!除了新增的老年模式,还有5个新发现分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!最近,微信推送了8。0。14内测版,我也尝试着进行了升级,发现新增一个老年模式,除此之外,还有5个新……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网