5

我知道编译器可能会也可能不会执行函数的内联扩展,无论程序员是否请求。
我只是想知道,程序员有什么方法可以确定编译器已经内联了一个特定的函数?

4

6 回答 6

10

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

诸如inlineregister(不寒而栗)之类的东西是对编译器的建议,它可以自由地接受它们,忽略它们,甚至对你撒谎说它是在偷偷背着你而不做它的时候完成的 :-)

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

于 2010-03-05T04:36:11.997 回答
2

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

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

于 2010-03-05T05:40:52.050 回答
1

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

于 2010-03-05T04:37:30.917 回答
0

读取目标文件的反汇编。

于 2010-03-05T04:35:26.873 回答
0

除了查看输出汇编器之外,没有办法知道。

这些天的编译器是“聪明的”,他们决定内联哪些函数以及在什么情况下。

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

于 2010-03-05T05:52:42.947 回答
0

我不认为有办法找出你想要什么,

但是您可以通过以下方式增加函数作为内联函数的可能性,

使函数的定义对调用它的翻译单元可见。即,您总是必须将内联函数的定义放在头文件中。

于 2010-07-13T12:42:35.220 回答