gcc 5.1中的链接时间优化是否足以放弃内联简单函数?

spr*_*aff 5 c++ gcc

出于习惯,我经常为简单的函数内联函数定义,例如这个(人为的例子)

class PositiveInteger
{
private:
    long long unsigned m_i;
public:
    PositiveInteger (int i);
};

inline PositiveInteger :: PositiveInteger (int i)
: m_i (i)
{
    if (i < 0)
        throw "oops";
}
Run Code Online (Sandbox Code Playgroud)

我一般喜欢分离界面文件和实现文件,但是,这是我习惯于那些我脑子里的声音告诉我的热门可能会受到很多打击的功能.

我知道这个建议是"简介第一"并且我同意但是如果我事先知道编译器会生成相同的最终目标代码,无论是否在编译或链接时内联这些函数,我都可以避免一大堆分析工作.(另外,我相信注入的性能分析代码本身会导致时序的变化,从而影响非常简单的函数的效果,例如上面的那个.)

GCC 5.1刚刚发布了广告LTO(链接时间优化)的改进.他们真的有多好?知道最终可执行文件的哪些功能可以安全地内联不会受到影响?

Mar*_*k B 1

您已经回答了自己的问题:除非您的目标是某种资源有限的嵌入式系统,否则首先要编写代码以保证清晰度和可维护性。然后,如果性能不可接受,您可以分析并针对实际热点进行工作。想一想:如果您编写更清晰的代码,需要额外花费 250 纳秒,而这在您的用例中并不明显,那么额外的时间并不重要。