题
我知道编译器可能会或可能不会执行函数的内联扩展,无论是否由程序员请求。
我只是想知道,程序员可以确定编译器已将特定函数绑架的任何方法吗?
解决方案
除了查看生成的代码外,没有。某些实施可能会提供该信息,但标准不需要。
像 inline
或者 register
(颤抖)是 建议 对于编译器而言,可以自由接受它们,忽略它们,甚至对您撒谎,因为它在秘密地落后而不这样做的同时却做到了:-)
我倾向于不使用这样的功能,因为我怀疑编译器通常比如何从代码中扭曲最多的性能要好。
其他提示
您可以介绍您的代码,并查看感兴趣的功能是否显示在呼叫堆栈中。虽然,我想不能保证您的堆栈采样率不够高。
但这可能证明它是内衬的:如果您知道 A
呼叫 B
, ,打电话 C
, , 和 A
永远不要打电话 C
直接,如果您看到 A
打电话 C
在通话堆栈上,你知道 B
被与该电话联系在一起。
将编译器设置为生成汇编代码并在此检查。
阅读对象文件的拆卸。
除了查看输出组件外,没有办法知道。
如今,编译器是“聪明的”,他们决定内联和什么情况的功能。
就像寄存器关键字一样,编译器如今进行了选择,并且确实忽略了您的请求。
我认为没有办法找出您想要的东西,
但是您可以增加功能的可能性,是由
使函数的定义可见到所谓的翻译单元。即,您始终必须将内联函数的定义放在标题文件中。
不隶属于 StackOverflow