Jen*_*son 5 c c++ optimization performance header-files
我经常听说将标题放在标题中是不好的做法,但在标题中放置短函数是很常见的,部分原因是为了帮助编译器更好地进行优化.
内联关键字可以帮助编译器确定应该内联哪些函数,但除此之外,是否还有理由在头文件中包含短的性能关键函数?或者现代编译器不再重要吗?
从技术上讲,inline关键字仅表示允许在多个翻译单元中进行定义。也就是说,如果您在头文件中定义了一个内联函数,并且该头文件包含在多个源文件中,那么这很好。对于非内联、非模板函数,这将是非法的。
但是编译器可以并且确实利用能够看到被调用函数的代码的优势。这不仅适用于内联函数,而且适用于代码可见的任何其他函数。许多编译器试图很好地猜测是否内联代码。内联代码可能会使程序更大或更小,更快或更慢。如果编译器可以确定内联代码时代码可能更快更小,那么它就会这样做。否则它必须考虑权衡。
许多现代编译器可以进行链接时优化,其中开始时未内联的代码可以在链接阶段内联,但会在链接时间上有一些成本。当延迟到链接时间时,也可能会丢失某些优化机会。
根据我自己的经验,我发现使小函数内联通常总是大小和速度的双赢。对于较大的函数,我经常看到它使程序更快但更大,但我也很少看到它使程序更慢和更大。如果特定功能的性能很重要,则需要进行测量以帮助选择是否内联。