C++ 进程内函数调用的开销

C++ 进程内函数调用的开销,c++,function,oop,C++,Function,Oop,据 较旧的语言在子例程调用中有开销,这 阻止人们使用小方法。现代OO语言有很多优点 大大减少了进程内调用的开销 现代OO语言是如何消除这种开销的?作者指的是内联函数吗?我想是的。 此外,当调用需要通过堆栈传递大量参数时,调用的开销也很大。作者提到了OO语言,在OO语言中,许多参数可能被包装在“this”指针中,该指针在ecx寄存器中传递(要了解有关“thiscall调用约定”的更多信息)。有两种改进可以减少/消除函数调用的开销: CPU演进: 编译器演变: 编译器(也基于概要文件数据)可以检

较旧的语言在子例程调用中有开销,这 阻止人们使用小方法。现代OO语言有很多优点 大大减少了进程内调用的开销

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

我想是的。
此外,当调用需要通过堆栈传递大量参数时,调用的开销也很大。作者提到了OO语言,在OO语言中,许多参数可能被包装在“this”指针中,该指针在ecx寄存器中传递(要了解有关“thiscall调用约定”的更多信息)。

有两种改进可以减少/消除函数调用的开销:

  • CPU演进:
  • 编译器演变:
编译器(也基于概要文件数据)可以检测到在何处内联,以避免小函数调用的开销,但仅编译器一项仅占工作的50%:

现代CPU非常擅长流水线和优化;大多数情况下,使用许多小型非内联函数实际上效率更高,这样CPU就可以正确地预检测和管道化它们,而不是使用许多内联函数来增加二进制大小和缓存未命中的几率


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

很好,然而,实际上解决“这个”可能导致缓存丢失wich比传递一打要昂贵parameters@kravchenko当你说,很多参数可以被包装在“这个”指针中,你的意思是,C++成员函数可以访问成员属性,而不需要将它们作为参数传递。我理解正确了吗,或者你是说别的什么?你说的是指令还是数据?既然您提到了可执行文件的大小,我想您是在谈论指令缓存,那么可执行文件大小的增加是如何导致指令缓存丢失的呢?不过,由于页面错误,它可能会减慢程序的速度。