gpt4 book ai didi

c++ - 虚函数和性能 - C++

转载 作者:IT老高 更新时间:2023-10-28 11:51:29 29 4
gpt4 key购买 nike

在我的类设计中,我广泛使用抽象类和虚函数。我有一种感觉,虚拟功能会影响性能。这是真的?但我认为这种性能差异并不明显,看起来我正在做过早的优化。对吧?

最佳答案

你的问题让我很好奇,所以我继续在我们使用的 3GHz 有序 PowerPC CPU 上运行了一些时序。我运行的测试是用 get/set 函数制作一个简单的 4d vector 类

class TestVec 
{
float x,y,z,w;
public:
float GetX() { return x; }
float SetX(float to) { return x=to; } // and so on for the other three
}

然后我设置了三个数组,每个数组包含 1024 个这些 vector (小到足以放入 L1)并运行一个循环,将它们彼此相加(A.x = B.x + C.x)1000 次。我使用定义为 inline 的函数运行它, virtual , 和常规函数调用。结果如下:

  • 内联:8 毫秒(每次调用 0.65 纳秒)
  • 直接:68 毫秒(每次调用 5.53 纳秒)
  • 虚拟:160 毫秒(每次调用 13 纳秒)

因此,在这种情况下(所有内容都放入缓存中),虚函数调用比内联调用慢约 20 倍。但这究竟意味着什么?每次通过循环的行程恰好导致3 * 4 * 1024 = 12,288函数调用(1024 个 vector 乘以四个分量乘以每次添加的三个调用),因此这些时间表示 1000 * 12,288 = 12,288,000函数调用。虚拟循环比直接循环多花 92 毫秒,因此每次调用的额外开销为每个函数 7 纳秒

由此我得出结论:,虚函数比直接函数慢得多,,除非你打算每秒调用一千万次,没关系。

另请参阅:comparison of the generated assembly.

关于c++ - 虚函数和性能 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449827/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com