首页  >  文章  >  后端开发  >  C 中的虚拟函数是性能瓶颈吗?

C 中的虚拟函数是性能瓶颈吗?

Patricia Arquette
Patricia Arquette原创
2024-11-19 08:33:02630浏览

Are Virtual Functions in C   a Performance Bottleneck?

C 中虚拟函数的性能影响

您表达了对类设计中虚拟函数性能影响的担忧。这是一个合理的担忧,还是可以被视为过早优化?

为了解决您的问题,我们在 3GHz PowerPC CPU 上进行了性能测试。我们创建了一个带有 get/set 函数的简单 4D 矢量类。我们使用定义为内联、虚拟和常规函数调用的函数进行测试。

以下是结果:

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

在这种情况下,数据适合 L1 缓存,虚拟函数调用为比内联调用慢大约 20 倍。然而,考虑这种性能差异的背景至关重要。

测试循环的每次迭代都涉及 12,288 次函数调用。因此,虚拟循环比直接循环花费了 92 毫秒,导致每次函数调用仅额外增加 7 纳秒的开销。

根据这些结果,我们得出结论:

  • 虚拟函数确实比直接函数慢。
  • 性能损失可以忽略不计,除非您打算极其频繁地调用它们(每秒数百万次)。

在大多数情况下,除非针对极端性能进行优化,否则与使用虚拟函数进行封装和灵活性相关的权衡超过了任何潜在的性能问题。

以上是C 中的虚拟函数是性能瓶颈吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn