c++ - 函数内联——有哪些损害性能的例子?

标签 c++ c inline

传统观点认为函数内联并不总是有益,甚至会损害性能:

我理解为什么内联应该有所帮助 - 它通过将被调用函数包含在其调用者中来消除函数调用开销。

我也理解为什么人们声称它会损害性能——内联函数在某些情况下会增加代码大小,最终会增加缓存未命中率甚至触发额外的页面错误。这一切都是有道理的。

不过,我很难找到内联实际上会损害性能的具体示例。当然,如果这个问题足以值得警告,那么某个地方的某个人一定遇到过内联是一个问题的例子。所以,我问...

什么是一个好的、具体的代码示例,其中函数内联实际上会损害性能?

最佳答案

在某些具有大量内联函数的平台上,可以通过导致“远”跳转而不是相对跳转来降低性能。内联也可能导致页面错误,操作系统需要将更多代码拖入内存,而不是执行可能已经存在的代码(作为子例程)。

某些平台可能针对“近代码”优化了跳转指令。这种类型的跳转使用当前位置的有符号偏移量。带符号的偏移量可能会受到限制,例如 127 字节。长跳转需要更大的指令,因为较长的跳转必须包含绝对地址。较长的指令需要更多的时间来执行。

长内联函数可能会扩展可执行文件的长度,因此操作系统需要将新“页面”拖入内存,称为页面交换。页面交换会减慢应用程序的执行速度。

这些是内联代码会降低性能的“可能”原因。真正的真相是通过剖析获得的。

关于c++ - 函数内联——有哪些损害性能的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808498/

相关文章:

c++ - 从 C++ 代码使用的 C 内联函数

c++ - 将闭包作为参数传递给构造函数 C++

c++ - 如何返回对包含 nullptr 的 unique_ptr 的引用

JavaScript 内联事件或事后添加事件

c - 如何在 C 中包含和使用 cairo 图形库?

c - Linux内核3. *系列在通过make-kpkg和gcc-4.8.5在Ubuntu 16.04.1中自定义编译后无法正常启动。

c++ - 使用指向内联函数的指针与使用指向函数的指针

c++ - 如何减少代码运行时间以证明文本正确?

c++ - C++列表中最常见的元素,STL?

c - 关于 C 中存储类的使用