我知道内联是对编译器的一个提示或请求,它用来避免函数调用开销。
那么,根据什么可以确定一个函数是否为内联的候选函数呢?在哪种情况下应该避免内联?
发布于 2009-12-19 16:09:08
告诉编译器内联一个函数是一种优化,最重要的优化规则是过早优化是万恶之源。总是写出清晰的代码(使用高效的算法),然后分析你的程序,只优化耗时太长的函数。
如果你发现一个特定的函数非常简短简单,并且它在一个紧密的内部循环中被调用了数万次,那么它可能是一个很好的候选者。
不过,您可能会感到惊讶--许多C++编译器会自动为您内联小函数--而且它们可能也会忽略您的内联请求。
发布于 2009-12-19 16:40:00
过早优化是万恶之源!
根据经验,我通常只内联"getters“和"setters”。一旦代码正常工作并稳定下来,分析就可以显示哪些函数可以从内联中受益。
另一方面,大多数现代编译器都有相当好的优化算法,并且会为你内联你应该内联的东西。
Reasuming --编写内联的单行函数,以后再考虑其他函数。
发布于 2009-12-19 16:09:54
最好的方法是分析你的程序,并标记那些被调用了很多次的小函数,这些函数会消耗掉inline
的CPU周期。这里的关键字是“小”--一旦函数调用开销与花费在函数中的时间相比微不足道,那么内联它们就没有意义了。
我建议的另一个用途是,如果您有一些小函数,这些函数在性能关键型代码中被频繁调用,从而导致缓存未命中相关,那么您可能也应该内联这些函数。同样,这也是分析器应该能够告诉您的。
https://stackoverflow.com/questions/1932311
复制相似问题