首页 > 编程语言 >(C++) C++虚函数性能分析

(C++) C++虚函数性能分析

时间:2022-10-17 22:59:39浏览次数:68  
标签:baseA mulTwo 函数 性能 float C++ public

class baseA {
public:
    virtual float mulTwo(float a, float b) = 0;
    virtual ~baseA() = default;
};

class vClassA : public baseA {
public:
  ~vClassA() override = default;
  float mulTwo(float a, float b) override {
    return a * b;
  }
};

class ClassB {
public:
  float mulTwo(float a, float b) {
    return a * b;
  }
};

int main() {
    volatile double sum{};
    baseA* obja = new vClassA();
    sum += obja->mulTwo(1.1, 2.2);

    ClassB objb;
    sum += objb.mulTwo(1.1, 2.2);
    return 0;
}

汇编分析见 Compiler Explore

虚函数调用过程:

  1. 从对象中获取虚表指针,该指针指向一个函数指针数组,每个指针对应一个虚函数;
  2. 从虚表中获取正确的函数地址,放到寄存器中;
  3. 跳转到该寄存器中的地址,而不是跳转到一个硬编码的地址。

性能降低的原因:

  1. 由于需要间接寻址,会存在分支预测问题,由此导致可能的失败时清空流水线及重新从内存加载指令的耗时;
  2. 虚函数不能进行函数级别的优化,如内联以及其他的优化,导致可能的性能损失(有可能丧失的优化(猜测):RVO优化,jump优化)。

标签:baseA,mulTwo,函数,性能,float,C++,public
From: https://www.cnblogs.com/vaughnhuang/p/16801037.html

相关文章

  • numpy的通用函数ufunc
    参考:《利用python进行数据分析-第一版》......
  • 【LeetCode】1464. 数组中两元素的最大乘积(C++)
    1464.数组中两元素的最大乘积(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​3解题思路​​​​4源码详解(C++)​​......
  • 【LeetCode】561. 数组拆分 I(C++)
    561.数组拆分I(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​3解题提示​​​​4解题思路​​​​5源码详解(C++)​​1题目描述给......
  • ABAP SMARTFORMS和函数_1
                              自定义上传图片       ......
  • 【LeetCode】1351. 统计有序矩阵中的负数(C++)
    1351.统计有序矩阵中的负数(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​2.4示例4​​​​3解题提示​​​​4......
  • 【LeetCode】1252. 奇数值单元格的数目(C++)
    1252.奇数值单元格的数目(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​3解题提示​​​​4源码详解(C++)​​1题目描述给你一个n......
  • 【LeetCode】1299. 将每个元素替换为右侧最大元素(C++)
    1299.将每个元素替换为右侧最大元素(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​3解题提示​​​​4源码详解(C++)​​1题目描述给......
  • Python zip函数及用法
    zip()函数是 Python 内置函数之一,它可以将多个序列(列表、元组、字典、集合、字符串以及range()区间构成的列表)“压缩”成一个zip对象。所谓“压缩”,其实就是将这些......
  • Python reversed函数及用法
    eserved()是Pyton内置函数之一,其功能是对于给定的序列(包括列表、元组、字符串以及range(n)区间),该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列)。reserved()......
  • Python sorted函数及用法
    sorted()作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。sorted()函数的基本语法格式如下:list=sorted(iterable,key=None......