进程内函数调用的开销

时间:2015-11-13 09:36:44

标签: c++ function oop

根据Refactoring to Patterns

  

旧语言在子程序调用中带来了开销   从小方法中阻止人们。现代OO语言很漂亮   大大消除了进程中调用的开销。

现代OO语言如何消除这种开销?作者是指内联函数吗?

2 个答案:

答案 0 :(得分:3)

有2个演变可以减少/消除函数调用的开销:

  • CPU发展:
  • 编译器演变:

编译器(也基于配置文件数据)可以检测内联的位置,以避免小函数调用的开销,但编译器本身只占工作量的50%:

现代CPU非常擅长流水线和优先技术;大多数情况下,它具有许多小的非内联函数实际上更有效,因此CPU可以正确地优先处理和管道它们而不是许多内联函数,这些函数会增加二进制大小和缓存未命中的机会。

由于现代CPU功能非常强大,因此值得尝试更好地组织代码(减少维护工作=减少工作量=降低开发成本),而不是花时间进行微优化(如果在几乎所有情况下都由编译器完成,那么微优化会更好)。

答案 1 :(得分:2)

我想是的。 此外,当需要通过堆栈传递大量参数时,调用很昂贵。作者提到了OO语言,其中许多参数可以包含在'this'指针中,该指针在ecx寄存器中传递(要查看更多关于__thiscall调用约定https://msdn.microsoft.com/en-us/library/ek8tkfbw.aspx)。

相关问题