我知道编译器可能会或可能不会执行函数的内联扩展,无论是否由程序员请求。
我只是想知道,程序员可以确定编译器已将特定函数绑架的任何方法吗?

有帮助吗?

解决方案

除了查看生成的代码外,没有。某些实施可能会提供该信息,但标准不需要。

inline 或者 register (颤抖)是 建议 对于编译器而言,可以自由接受它们,忽略它们,甚至对您撒谎,因为它在秘密地落后而不这样做的同时却做到了:-)

我倾向于不使用这样的功能,因为我怀疑编译器通常比如何从代码中扭曲最多的性能要好。

其他提示

您可以介绍您的代码,并查看感兴趣的功能是否显示在呼叫堆栈中。虽然,我想不能保证您的堆栈采样率不够高。

但这可能证明它是内衬的:如果您知道 A 呼叫 B, ,打电话 C, , 和 A 永远不要打电话 C 直接,如果您看到 A 打电话 C 在通话堆栈上,你知道 B 被与该电话联系在一起。

将编译器设置为生成汇编代码并在此检查。

阅读对象文件的拆卸。

除了查看输出组件外,没有办法知道。

如今,编译器是“聪明的”,他们决定内联和什么情况的功能。

就像寄存器关键字一样,编译器如今进行了选择,并且确实忽略了您的请求。

我认为没有办法找出您想要的东西,

但是您可以增加功能的可能性,是由

使函数的定义可见到所谓的翻译单元。即,您始终必须将内联函数的定义放在标题文件中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top