为什么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),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。

开发者生产力工具大全:

从人工到自动化,从重复到创新,技术演进的历程中,都伴随着开发者工具类产品的发展,所以这里整理近几年口碑良好,使用广泛的22款程序员生产力工具。

1.研发项目管理与协作:PingCode

优点:让工作推进、进度/问题追踪、团队协作变得更简单,2021年研发项目管理榜单TOP1(36Kr)。

简介:覆盖研发全生命周期,广泛用于需求、版本、项目(敏捷/kanban/瀑布)、测试、缺陷、文档、效能等环节管理与协作。并且集成github、gitlab、jinkens等主流工具,支持私有部署、在线等多种部署使用方式。

教程/官网

2.任务管理/甘特图制作工具:Worktile

优点:功能成熟、性价比高、国内市场占有率最高的团队任务工具;

简介:在功能上Worktile 是一个工具集合,它具备OKR目标管理、项目管理、项目集管理、项目计划、项目风险、项目成本管理、企业网盘、审批、简报等能力。并且具备强大的自定义能力,能够配置出符合各种项目团队的流程、表单、字段、数据报表,以及具备丰富的模板市场。

官网/教程

3.分布式版本控制系统:Git

优点:分布式开发、速度快、灵活

简介:Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

教程/官网

4.数据库管理工具:Navicat

优点:高效、安全,最好用的数据库管理工具。

简介:“Navicat”是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和 MongoDB 等不同类型的数据库,它与阿里云、腾讯云、华为云、Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud 和 MongoDB Atlas等云数据库兼容。

官网/教程

其余工具可通过《神级程序员都用什么工具?程序员生产力工具大全 》查看,以上均整理自该文章。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月22日 上午2:36
下一篇 2023年2月22日 上午2:38

相关推荐

  • python与Matlab神经网络之间的区别是怎样的

    区别是:Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python解释器易于扩展,可以使用C语言或C++扩展新的功能和数据类型。MATLAB用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 Python Python由…

    2023年2月20日
    10700
  • 日常进度报表有什么好的软件

    日常进度报表好的软件有:一、Worktile;二、PingCode;三、progress 进度条;四、简道云;五、SeaTable;六、Asana;七、Jira;八、Weekdone。Worktile 是国内首个同时提供OKR目标+项目管理功能的工具,它曾在2021年36氪发布的项目管理系列榜单总榜…

    2023年4月21日
    1400
  • 质量管理五大工具是如何运用的

    质量管理五大工具的运用:1、SPC的运用;2、MSA的运用;3、FMEA的运用;4、APQP的运用;5、PPAP的运用。其中,SPC指统计过程控制,实施SPC分为分析阶段和监控阶段两个阶段。 1、SPC的运用 统计过程控制(简称SPC)是一种借助数理统计方法的过程控制工具。它对生产过程进行分析评价,…

    2023年1月1日
    23600
  • 敏捷开发干什么用的

    敏捷开发的作用是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被…

    2023年4月16日
    1400
  • 产品功能优先级怎么划分

    产品功能优先级划分的排序框架:1、MoSCoW;2、KANO;3、执行 & 收益矩阵;4、延迟成本 / 工期(CD3);5、RICE分数。其中,MoSCoW是一个简单且有效的工具,可以帮助产品发现用户需求,让目标用户从中获益并找到价值。 1、MoSCoW MoSCoW是一个简单且有效的工具,…

    2023年1月2日
    14800
  • oa系统和erp系统区别是什么

    oa系统和erp系统区别是:1、含义不同;2、包含功能不同;3、目的不同;4、服务对象不同。含义不同是指,OA指Office Automation,中文简称自动办公系统;ERP指Enterprise Resource Planning,中文简称企业资源计划。 一、含义不同 OA指Office Aut…

    2023年4月20日
    2400
  • 防火墙类型有哪些

    防火墙类型有:1、静态包过滤防火墙;2、电路级网关防火墙;3、状态检测防火墙;4、代理防火墙;5、新一代防火墙 (NGFW);6、混合型防火墙。静态包过滤防火墙,又称无状态检测防火墙,在 OSI 网络层(第 3 层)运行。 防火墙类型 不同类型的防火墙采用不同的过滤方法。虽然每种类型的防火墙都是为了…

    2022年10月27日
    21000
  • 目标管理与okr的区别

    区别有:一、目的不同;二、衡量标准不同;三、公开性不同;四、沟通不同;五、适用场景不同。OKR 主要用于聚焦核心目标的制定与跟踪。目标管理作为绩效评价的工具;OKR 用在第一个环节——目标与对应关键结果,一个公司的所有部门都会有自己的 OKRs。 一、目的不同 OKR 主要用于聚焦核心目标的制定与跟…

    2023年4月16日
    6000
  • 安卓既然是开源的,为什么谷歌还要开启授权模式

    这是因为:安卓系统是谷歌公司发明的,谷歌对安卓拥有版权著作权和注册权,如果别的公司或个人要把安卓用于市场商业行为目的,那就必须经由谷歌公司授权后才可商用,否则就构成盗版侵权,另外谷歌授权需要对安卓应用进行部分保护限制,主要是谷歌全家桶套件。 安卓遵循开源协议,因其内核基于linux,编程接口基于ja…

    2023年5月28日
    000
  • excel中的函数参数有哪些

    excel中的函数参数有:1、常量;2、逻辑值;3、数组;4、错误值;5、单元格引用;6、嵌套函数;7、名称和标志。常量是直接输入到单元格或公式中的数字或文本,或由名称所代表的数字或文本值。 1、常量 常量是直接输入到单元格或公式中的数字或文本,或由名称所代表的数字或文本值,例如数字“2890.56…

    2023年1月11日
    7000

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部