C++ g++;内联以下函数?

C++ g++;内联以下函数?,c++,inline,C++,Inline,假设我有两个函数: void foo() { // A big function } // This is a wrapper to foo inline void bar() { // couple of lines -- simple ones. I promise! foo(); } 我知道编译器最终决定是否内联函数。我想知道的是,当涉及到包装器(调用其他函数)时,编译器的分析深度有多深 它是停在bar()内,只在调用bar()的地方复制内部的任何内容,还是同时

假设我有两个函数:

void foo() {
    // A big function
}

// This is a wrapper to foo
inline void bar() {
    // couple of lines -- simple ones. I promise!
    foo();
}
我知道编译器最终决定是否内联函数。我想知道的是,当涉及到包装器(调用其他函数)时,编译器的分析深度有多深


它是停在
bar()
内,只在调用
bar()
的地方复制内部的任何内容,还是同时查看
foo()
?如果
foo()
位于动态链接到
bar()
的预编译库中,这有什么不同?

唯一确定的方法是检查反汇编


一般来说,我从不担心这种微优化,因为我相信编译器在内联决策中会做出正确的选择。只有当评测显示函数调用导致了大量开销时,我才会尝试更改编译器的选择。

如果所有内容都在同一个翻译单元中,并且启用了优化,则它可能是内联的,但这很可能取决于编译器的代码分析和优化设置。你不能指望它能做到(或避免)


如果
foo()
在它自己的翻译单元(甚至是它自己的库)中,它将不会被内联(因为这是不可能的)。像“链接时代码优化”(例如MSVC中提供的)之类的东西可能会尝试在不同的翻译单元上内联代码,但它无法在动态库中内联代码。

我同意-一些程序员陷入了细节的泥潭,错过了更大的图景-真正的节约可以在这里实现。