为什么C++中使用虚函数时会影响效率

原因有:1、Cache命中率不够好;2、编译器不好优化;3、虚函数需要一次间接的寻址。虚拟函数不在cache中的概率高,而且一调函数就可能在cache中载入虚函数表,如果又调用其它虚函数,可能又得载入到cache中导致cache被占用,指令和数据的cache命中率下降。

1、Cache命中率不够好

一般函数可能编译后的指令就在当前函数地址附近,这样很可能在调用前目标函数代码已经被载入指令cache. 但是虚拟函数不在cache中的概率高。而且一调函数就可能在cache中载入虚函数表,如果这个虚函数又调用其它的虚函数,那么可能又得载入到cache中导致cache被占用,指令和数据的cache命中率下降。

2、编译器不好优化

因为编译器只知道你要调用的是一个不确定的地址处的函数,没法知道更多细节,也就没法替你做更多优化。

3、虚函数需要一次间接的寻址

虚函数需要一次间接的寻址,而一般的函数可以在编译时定位到函数的地址,虚函数(动态类型调用)是要根据某个指针定位到函数的地址。

针对类的虚函数的机制,如果有虚函数的话,编译器会为类增加一个虚函数表(VBL),当在动态执行程序时,会到该虚函数表中寻找函数。多增加了一个过程, 效率肯定会低一些,但带来了运行时的多态。

延伸阅读:

什么是虚函数?

虚函数,是指被virtual关键字修饰的成员函数。

在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。

文章标题:为什么C++中使用虚函数时会影响效率,发布者:小编,转载请注明出处:https://worktile.com/kb/p/39241

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月22日
下一篇 2023年2月22日

相关推荐

  • 预测和回归的区别是什么

    预测和回归的区别有:1、定义与性质;2、目标与结果;3、常用算法;4、评估方法;5、适用场景;6、实际应用。其中,定义与性质指的是预测和回归在统计和机器学习中的基础概念与其固有特性。 1、定义与性质 预测:通常指的是在给定一些输入变量的情况下,预测未来某个或某些事件的可能结果。 回归:是一种统计分析…

    2023年7月30日
    1.3K00
  • 现在为什么都学编程

    摘要 在当今社会,1、技术进步迅猛 2、就业市场需求高 3、创新与创业机会增多为何如此多的人选择学习编程。尤其是技术进步迅猛,它不仅推动了各个行业的发展,还改变了我们生活的方方面面。编程已经成为链接现代社会和技术创新的桥梁,无论是智能家居、在线教育、电商平台、还是人工智能和大数据分析,都离不开编程技…

    2024年4月25日
    600
  • SAAS主要用于什么行业

    SAAS主要用于适合以下情况的行业:1、看实力;2、看安全;3、看案例;4、看顾问;5、看服务;6、看管理;7、看功能;8、看技术。一个SaaS服务商的运营的稳定性非常重要,因此,信息化系统项目实施前需要考虑SaaS服务商的规模、盈利能力、增长情况等。 一、看实力 虽说目前各大SaaS服务商承诺支持…

    2023年4月29日
    35700
  • 购买oa系统

    标题:购买OA系统 购买OA(Office Automation)系统时应关注系统的适应性、功能完备性、用户友好性和经济性。具体来看,1、选型要符合组织的业务需求并能够与当前的IT基础设施无缝对接;2、系统功能需饱满,覆盖文档管理、通讯录、日程安排等核心办公模块;3、界面直观易操作,减轻员工的学习和…

    2024年1月12日
    22000
  • 项目经理如何管理项目

    项目管理是一个复杂的过程,涉及众多方面的考量和技能。项目经理如何管理项目的关键在于制定明确的计划、有效的沟通、团队管理、质量保证以及风险控制。在这五个方面中,制定明确的计划尤为关键,它为项目的所有阶段提供了蓝图和方向。一个好的计划应该包括目标设定、任务分配、时间线、预算和资源分配等要素,它能够帮助团…

    2024年4月10日
    5500
  • 如何衡量研发投资的回报

    衡量研发投资回报涉及考量几个关键性指标:1、净现值(NPV)、2、内部收益率(IRR)、3、回报率(ROI)、4、研发弹性、5、专利和知识产权的质量与数量。净现值(NPV)通过预测项目未来现金流的净值量化投资效益。内部收益率(IRR)评估投资获得的平均年回报率。回报率(ROI)用于计算每投入一单位货…

    2023年11月30日
    1.2K00
  • SaaS、CRM、OA、ERP、HR、进销存都是什么

    SaaS就是软件服务的统称;CRM是英文Customer Relationship Management (客户关系管理)的简称;OA是Office Automation(办公自动化)的简称;HR软件是human resource software(人力资源软件)的简称;财务系统就是管财务的;进销存…

    2023年4月29日
    1.3K00
  • 项目团队协作方案怎么写

    写项目团队协作方案的步骤:一、明确项目目标和任务;二、建立有效的沟通渠道;三、鼓励团队合作;四、设定清晰的角色和责任;五、制定有效的决策机制;六、建立有效的工作流程;七、定期评估和反馈。在项目启动阶段,项目经理需要明确项目目标和任务。 一、明确项目目标和任务 在项目启动阶段,项目经理需要明确项目目标…

    2023年4月24日
    1.5K00
  • 推荐哪些项目管理的app

    推荐的项目管理app有:一、PingCode;二、JIRA;三、tracup;四、coding。PingCode是国内软件研发项目管理软件。功能以及解决的问题有:能够支持看板、敏捷等多种项目的管理;管理团队目标,监控单或多项目的进度、管理计划分配资源、管理团队或个人的工作效率。 一、PingCode…

    2023年5月23日
    38300
  • 管理系统项目

    开门见山地回应该议题,管理系统项目通常指组织为了提升管理效率及质量而实施的软件化工程。管理系统项目能实现数据集成、优化流程、提升决策质量、增加透明度以及促进组织发展。1、实现数据集成,通过统一的数据库和接口,管理系统项目能够将分散的数据贯穿,达成数据共享与最大化利用。关于数据集成,详细描述即是采用现…

    2024年1月10日
    17500

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部