为什么C++里调用虚函数比调用普通函数慢?

为什么C++里调用虚函数比调用普通函数慢?

原因:
- 运行时需要得到对应类的函数的地址
- 当在用父类的引用或者指针调用虚函数时,会先从该对象的头部取到虚函数的地址(C++标准规定虚函数表地址必须放最前),再从虚函数表中取到实际要调用的函数的地址,最终调用该函数
- 调用虚函数,相比普通函数,实际上多了三条指令:取虚表,取函数地址,call调用
- 影响cpu流水线
- 编译器不能是内联函数
- 仅当用父类引用或者指针调用时,不能内联
- 因为内联函数是指在编译期间用被调用的函数体本身来代替函数调用的指令,但是虚函数是直到运行时才能知道要调用的是哪一个函数,所以没法在编译时进行内联函数展开。
- 但是当子类直接调用虚函数,是可以内联优化的。
- 单继承时性能差不多,多继承的时候会慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值