如何判断"inline"是否有效?

How can I tell if "inline" worked?

本文关键字:inline 是否 有效 何判断 判断      更新时间:2023-10-16

我有一个工作的应用程序,我需要加速。我设置了分析(请参阅此处了解详细信息),它似乎报告了每个函数所花费的时间。我找不到一种方法来发现函数的不同子部分所消耗的时间。

然后,我在一些经常访问的小函数的声明中插入关键字"inline",希望能提高一些速度。但是当我再次分析时,我看到了相同的函数列表,包括我设置为内联的函数。这让我怀疑inline关键字是否被忽略了。

我有一个模糊的回忆,在一些编译器中,内联关键字是编译器可以选择性地忽略的东西,这取决于可用的内存量。

那么,我可以做一些检查来确认"inline"关键字是否已经完成了它的工作?

你可以试试:

  • 检查编译器的汇编或机器码输出(是否反汇编或只是检查函数符号与nm或android的任何),或逐步通过调试器

  • 使用编译器pragma/属性强制内联(如果可用,例如GCC有一个函数属性always_inline),如果你的分析结果没有受到影响,那么可能编译器已经内联了

  • 检查你的分析文档,以确保你正在做的分析没有禁止内联

正如您回忆的那样,inline(以及在其类中定义的隐式内联成员函数)只是对编译器的提示。有些人认为它们只是管理一个定义规则问题的方便方法,但是你必须检查个别c++编译器的代码,看看关键字是否真的是这些天没有意义。编译器可能会使用各种指标来确定何时内联,包括影响的优化标志,出线函数的大小,对函数的调用次数(例如,如果只有一个,为什么不内联一个大函数?)等。