专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C虚函数会导致性能开销大?

  C虚函数作用
  C中的虚函数的作用主要是实现了多态的机制。
  虚函数是通过一张虚函数表(VirtualTable)实现的。在这个表中,主要是一个类的虚函数地址表,这张表解决了继承和覆盖等问题。就像一张地图一样,指明了指针实际所应该调用的函数。
  C虚函数特点
  我们在声明了一个有虚函数的类的对象同时,这个对象被添加了一个隐式成员。该成员保存了指向虚函数地址数组的指针。
  只要包含虚函数的类就会有一个虚函数表,当这个类是基类时,它的派生类也会有相应的虚函数表。当一个类有多个对象的时候,这些对象共享一个虚函数表。
  虚函数表是编译器生成的,程序运行时被载入内存。
  示意代码:includeiostreamusingnamespacestd;classA{public:inti;virtualvoidfunc(){}virtualvoidfunc2(){}};classB:publicA{intj;voidfunc(){}};intmain(){Aa;Bb;sizetlenasizeof(a);sizetlenbsizeof(b);coutlena,lenbendl;return0;}
  示意图:
  类A对象的存储空间以及虚函数表
  类B对象的存储空间以及虚函数表
  使用VS2022编译查看的对象存储空间以及虚函数表
  虚函数的函数调用机制
  正常的函数调用:复制栈上的一些寄存器,以允许被调用的函数使用这些寄存器;将参数复制到预定义的位置,这样被调用的函数可以找到对应参数;入栈返回地址;跳转到函数的代码,这是一个编译地址,因为编译器链接器硬编码为二进制;从预定义的位置获取返回值,并恢复想要使用的寄存器。
  虚函数调用:
  而虚函数调用与此完全相同,唯一的区别就是编译时不知道函数的地址,而是,从对象中获取虚表指针,该指针指向一个函数指针数组,每个指针对应一个虚函数;从虚表中获取正确的函数地址,放到寄存器中;跳转到该寄存器中的地址,而不是跳转到一个硬编码的地址。
  虚函数可能会造成性能损失的原因总结
  从上面的分析可以看出来,虚函数可能会造成性能损失:
  构造函数必须初始化vptr。
  虚函数是通过指针间接调用的,所以必须先得到指向虚函数表的指针,然后再获得正确的函数偏移量。
  内联是在编译时决定的。编译器不可能把运行时才解析的虚函数设置为内联。
  总结
  虚函数其实最主要的性能开销在于它阻碍了编译器内联函数和各种函数级别的优化,导致性能开销较大。如果代码中使用了更多的虚函数,编译器能优化的代码就越少,性能就越低。所以,评估虚函数的性能损失就是评估无法内联该函数所造成的损失。这种损失的代价并不固定,它取决于函数的复杂程度和调用频率。
  虚函数通常通过虚函数表来实现,在虚表中存储函数指针,实际调用时需要间接访问,这需要多一点时间。然而这并不是虚函数速度慢的主要原因,真正原因是编译器在编译时通常并不知道它将要调用哪个函数,所以它不能被内联优化和其它很多优化,因此就会增加很多无意义的指令(准备寄存器、调用函数、保存状态等)。真正的问题不是虚函数,而是那些不必要的间接调用。
  通常,使用虚函数没问题,它的性能开销也不大,而且虚函数在面向对象代码中有强大的作用。但是不能无脑使用虚函数,特别是在性能至关重要的或者底层代码中,而且大项目中使用多态也会导致继承层次很混乱。
  有什么好方法替代虚函数呢?使用访问者模式来使类层次结构可扩展;使用普通模板替代继承和虚函数;使用variants替代虚函数或模板方法。

巨石盖顶南安一片寺因此得名曾是状元罗伦疗伤地罗伦是明代的状元名儒他因抗疏落职,谪至泉州为官,在此开坛讲学深受爱戴在泉期间他不时遁于岩壑间,排遣内心悲愁南安一片寺曾是状元罗伦疗伤地泉州网讯(记者吴拏云陈起拓实习生丘文清文图)南游览语文教材名家笔下的万盛米行百草园和三味书屋秋日生活打卡季多收了三五斗是叶圣陶先生的小说名篇,讲述了旧中国农民丰收成灾的悲惨命运。万盛米行的河埠头,横七竖八停泊着乡村里出来的敞口船这次去江浙旅游,作为教师的我们专门去了几处从久等了!华大学生街美食攻略4。0终于来了头条创作挑战赛华大学生街美食攻略4。02022版实不相瞒每当编辑部选题枯竭的时候都会组队赶往华大学生街挖宝哝,就这条斜坡往上好吃的多到恨不得直接在这里住下距离上一次整理已经过去2年云南丽江的一座小众寺庙,名字很有特色,现在成为老年人活动中心这里是刘小顺的旅行和生活研究所。最近,我在云南省丽江市旅游,偶然发现了一座名字很有特色的寺庙,引起了我的好奇心。这座寺庙的名字叫靴顶寺,具体位置在丽江市古城区的庆云村,位置相当隐蔽云南侨乡富商,娶7个老婆,生20个儿女,豪宅如同迷宫在自驾到云南红河县后发现这是一座没有过度开发却又充满历史传奇色彩的城市。红河迤萨,一个马背上驮来的城镇,自然当地不乏侨乡富豪。不少有名之士的传奇经商故事与其奢华宅院都成为迤萨马帮文跟着五哈来过早,武汉美景怎可少文红豆众所周知,武汉是一个美食城市。在哈哈哈哈哈节目了,邓超鹿晗陈赫等人就去了武汉,张歆艺就和他们说来到武汉一定要吃早餐,过早特别好吃。说完,张歆艺还继续强调来武汉如果不过早,等于教你玩转费尔干纳原标题费尔干纳旅游攻略费尔干纳是乌兹别克斯坦一个虽小但美的城市,是个值得探索的地方。收藏这份攻略,旅游不迷路。住哪里?旅店Sakura,Megi,酒店AsiaHotelFergan高通中国区负责人徐皓是湖北高考状元他有800多项专利?很吓人运营商财经苏苏文今年,高通公司向欧盟委员会提交的有关标准必要专利SEP新框架的意见征集反馈意见中显示,自成立以来,高通在研发方面的投资超过730亿美元,徐皓作为高通中国区研发负责人芈昱廷若胜申真谞,中国大将必夺冠!终于,三星杯将激战,中韩1216!中韩1216,12场中韩世界大赛,场场激战,三星杯冠军,中国大将来了!终于,10月的2场世界大赛已经悄然完赛,农心杯中国先锋范廷钰九段喜获3连胜,虽然最终被韩第4姜东润九段击败,但这里绝对是火锅界的天花板,景观搞得这么美就算了,菜还这么好吃我第一次见这么美的火锅店,美的像仙境一般真的可以从早上拍到晚上随便一拍都是时尚大片而且菜也很好吃,这里绝对是火锅界的天花板拍照必打卡好去处山坡顶上俯瞰整个园林,美景尽收眼底从石板桥重庆的小清迈,穿越回上个世纪,不要门票开放中秋日生活打卡季如果你看惯了如今城市里面千篇一律的人工网红造景,如果你也想要追寻慢时光的脚步,如果你也想看一看上个世纪的老记忆,如果你也想体验一下上个世纪原滋原味的老地方,那么重庆的
常态化防控清洁消毒提示消毒水不是花露水,不能随便乱喷上海正常生产生活秩序在全面恢复中。清洁消毒对阻断病毒传播巩固疫情防控成果推进复工复产具有重要意义,但消毒要科学规范,既要确保消毒的有效性,又不能过度消毒,消毒水不是花露水,不能随便120万一针抗癌药,安徽首位患者治疗成功,一个月肿瘤消失最近看到一则新闻,安徽一女性癌症患者,用120万一针的抗癌药,仅一针就治疗成功。这个新闻一出,瞬间引起大家的关注,这种名为奕凯达的抗癌药,是我国首个利用细胞治疗的抗癌药,不得不感叹RNG夺冠庆典领免费皮肤,新一届比惨大会又开始了RNG夺冠庆典的领宝箱活动终于开始了,这次是从皮肤和炫彩里二选一,应该是优先未拥有,而且皮肤还算比较新。然后云顶的一个小小英雄蛋和100星之碎片也能领了。还有148款皮肤半价和35俄乌6月2日最新进展!普京的运筹帷幄,俄罗斯从被质疑到胜利在望俄罗斯军事行动前期,普京没有指挥军队快速拿下乌克兰,受到了多方的质疑,西方媒体更是扬言俄罗斯的军事行动已经失败。在俄罗斯不在包围基辅的时候,很多人认为俄罗斯真的无法获得胜利。但是普003型航母指日可待,三条弹射器上舰,战力倍增器的作用有多大?最近随着崇明海事局发布了长兴岛南岸新船进出船坞作业公告长兴岛造船厂003型航空母舰照片的流出以及相关卫星图片的爆料种种迹象表明,我国的第三艘航母003型可能会在端午节前后下水,此前6月宁可不吃肉!也要吃6种家常蔬菜,高营养低热量,越吃越健康在这个炎热的夏天,往往食欲下降得特别快,尤其是一些油腻的食物,更是不想吃,就想吃一些清淡可口的蔬菜。蔬菜,是我们一日三餐必不可少的食材,补充营养又美味。夏天正是补充营养的大好时机,建议大家若是不差钱,这5款零食记得多囤,比薯片瓜子更有营养在这个物质生活节节高升的时代,零食的出现早已不仅限于满足人们的味蕾,大家更希望能从好吃的零食中找寻到藏在生活角落里的小确幸,提高生活幸福指数!今天就为大家介绍5款新口味的小零食,好张译照顾植物人女友十年,娶二婚带孩子的钱琳琳,把继子当亲儿文丨柠一编辑丨娱阿姨2004年,张译正在片场拍戏,突然电话响了。电话那头的人气喘吁吁地说张译,快到医院来,你女朋友出事了。张译听完对方的话,甚至来不及问具体情况,拔腿就往医院跑。可我吃西红柿新书宇宙职业选手读者留言爆炸提升,属实让人意外有两个多月没来说说白金大神我吃西红柿的小说宇宙职业选手了。正好这两天,小说第五卷的剧情即将结束,它的章说也突然暴增了三倍,成功破千了,让不少读者有点懵。因为实在不知道哪里有了爆点,节育环不及时取出来,会长进肉里吗?多大年龄取出来比较好呢?医生,节育环的尾丝长期刺激宫颈,真的会增加宫颈癌的风险吗?李女士今年36岁了,虽然年龄不大,但是她已经是3个孩子的妈妈了。最近一段时间,他老公让她去医院上环。李女士听说上环有很多坏硒是预防心脏病抵抗癌症的重要元素!吃哪些食物能补充?告诉您这些年,凡是能跟硒扯上点关系的,都卖得贼贵。什么富含硒的青菜啦硒含量高的大米啦等等,都远超普通食品数十倍的价格。那么硒真的那么重要吗?还真的非常重要。硒是人体必不可少的微量元素,是
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网