C++ 内联函数

C++ 内联函数,c++,inline-functions,C++,Inline Functions,我知道编译器可能会也可能不会执行函数的内联扩展,无论程序员是否请求。 我只是想知道,程序员有没有办法确定编译器已经内联了一个特定的函数?读取目标文件的反汇编。除了查看生成的代码之外,没有。有些实现可能会提供这些信息,但这不是标准所要求的 像inline或register(颤栗)之类的东西都是对编译器的建议,它可以自由地接受它们,忽略它们,甚至对你撒谎,说它已经完成了,而你却在背后偷偷地不做它:-) 我倾向于不使用这样的功能,因为我怀疑编译器通常比我更了解如何使我的代码发挥最大的性能。设置编译器以

我知道编译器可能会也可能不会执行函数的内联扩展,无论程序员是否请求。

我只是想知道,程序员有没有办法确定编译器已经内联了一个特定的函数?

读取目标文件的反汇编。

除了查看生成的代码之外,没有。有些实现可能会提供这些信息,但这不是标准所要求的

inline
register
(颤栗)之类的东西都是对编译器的建议,它可以自由地接受它们,忽略它们,甚至对你撒谎,说它已经完成了,而你却在背后偷偷地不做它:-)


我倾向于不使用这样的功能,因为我怀疑编译器通常比我更了解如何使我的代码发挥最大的性能。

设置编译器以生成汇编代码并在那里进行检查。

您可以分析代码,并查看感兴趣的函数是否显示在调用堆栈中。尽管如此,我认为如果堆栈采样率不够高,就无法保证


但是它可以证明它是内联的:如果你知道
A
调用
B
,它调用
C
,并且
A
从不直接调用
C
,如果你在调用堆栈上看到
A
调用
C
,您知道
B
是为该调用内联的。

除了查看输出汇编程序外,没有其他方法可以知道

现在的编译器是“智能”的,它们决定内联哪些函数以及在什么情况下内联哪些函数


就像register关键字一样,现在的编译器会进行挑选,并真正忽略您的请求。

我认为没有办法找到您想要的内容

但是你可以增加函数作为内联函数的可能性


使函数的定义对调用它的翻译单元可见。i、 e您必须始终将内联函数的定义放在头文件中。

更合适的问题是,程序员是否可以通过任何方式确保编译器内联了特定的函数调用?如果您对debug v release builds有不同的标志,请确保使用后者。我见过一些编译器,除非至少启用了一些优化,否则它们永远不会内联。