我知道编译器可能会也可能不会执行函数的内联扩展,无论程序员是否请求 我只是很想知道,有没有什么方法可以让程序员确定编译器已经内联了一个特定的函数?
答案 0 :(得分:10)
除了查看生成的代码外,没有。某些实现可能会提供该信息,但标准并不要求它。
inline
或register
(颤抖)之类的东西是建议给编译器,它可以自由地接受它们,忽略它们甚至欺骗你它已经完成了它偷偷地背对着你而不是这样做: - )
我倾向于不使用这样的功能,因为我怀疑编译器通常比我更了解如何从我的代码中获得最大的性能。
答案 1 :(得分:2)
您可以对代码进行概要分析,并查看感兴趣的函数是否显示在调用堆栈中。虽然,我想无法保证您的堆栈采样率是否不够高。
但它可以证明它是内联的:如果您知道调用A
的{{1}}来电B
,而C
永远不会直接调用A
,如果您在调用堆栈上看到C
正在调用A
,则表示您已为此调用内联C
。
答案 2 :(得分:1)
设置编译器以生成汇编代码并检查它。
答案 3 :(得分:0)
阅读目标文件的反汇编。
答案 4 :(得分:0)
除了查看输出汇编程序外,没有办法知道。
这些天的编译器是“聪明的”,他们决定内联的功能和在什么情况下。
就像register关键字一样,编译器会在最近进行选择并真正忽略您的请求。
答案 5 :(得分:0)
我认为没有办法找出你想要的东西,
但是你可以通过
来增加函数作为内联函数的可能性使函数的定义对于调用它的转换单元可见。即你必须将内联函数的定义放在头文件中。