函数调用成本如何有效降低?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5067个文字,预计阅读时间需要21分钟。
译者在注中提到:原文链接为https://johnysswlab.com/make-your-programs-run-faster-avoid-function-calls/,翻译得到作者同意。这是关于程序底层优化第二篇文章,第一篇是关于缓存与优秀程序设计指南。
译者注:本文原始链接为johnysswlab.com/make-your-programs-run-faster-avoid-function-calls/,翻译获得作者同意。
这是程序底层优化的第二篇文章,第一篇文章缓存友好程序设计指南。
现代软件设计像层(layer),抽象(abstractions)和接口(interfaces)。 这些概念被引入到编程中的初衷是好的,因为它们允许开发者编写更容易理解和维护的软件。 在编译器的世界里,所有这些结构都转化为对函数的调用:许多小函数相互调用,而数据逐渐从一层移动到另一层。
这个概念的问题是,原则上函数调用代价是昂贵的。为了进行调用,程序需要把调用参数放在程序栈上或放到寄存器中。它还需要保存自己的一些寄存器,因为它们可能被调用的函数覆盖。被调用的函数不一定在指令缓存中,这可能导致执行延迟和性能降低。当被调用的函数执行完毕时,返回到原函数也会有性能上的损失。
一方面,函数作为一个概念是很好的,它使软件更可读,更容易维护。另一方面,过多地调用微小的函数,肯定会使程序变慢。
避免函数调用的一些技巧让我们来看看避免函数调用的一些技巧。
内联内联是编译器用来避免函数调用和节省时间的一种技术。简单地说,内联一个函数意味着把被调用的函数主体放在调用的地方。
本文共计5067个文字,预计阅读时间需要21分钟。
译者在注中提到:原文链接为https://johnysswlab.com/make-your-programs-run-faster-avoid-function-calls/,翻译得到作者同意。这是关于程序底层优化第二篇文章,第一篇是关于缓存与优秀程序设计指南。
译者注:本文原始链接为johnysswlab.com/make-your-programs-run-faster-avoid-function-calls/,翻译获得作者同意。
这是程序底层优化的第二篇文章,第一篇文章缓存友好程序设计指南。
现代软件设计像层(layer),抽象(abstractions)和接口(interfaces)。 这些概念被引入到编程中的初衷是好的,因为它们允许开发者编写更容易理解和维护的软件。 在编译器的世界里,所有这些结构都转化为对函数的调用:许多小函数相互调用,而数据逐渐从一层移动到另一层。
这个概念的问题是,原则上函数调用代价是昂贵的。为了进行调用,程序需要把调用参数放在程序栈上或放到寄存器中。它还需要保存自己的一些寄存器,因为它们可能被调用的函数覆盖。被调用的函数不一定在指令缓存中,这可能导致执行延迟和性能降低。当被调用的函数执行完毕时,返回到原函数也会有性能上的损失。
一方面,函数作为一个概念是很好的,它使软件更可读,更容易维护。另一方面,过多地调用微小的函数,肯定会使程序变慢。
避免函数调用的一些技巧让我们来看看避免函数调用的一些技巧。
内联内联是编译器用来避免函数调用和节省时间的一种技术。简单地说,内联一个函数意味着把被调用的函数主体放在调用的地方。

