Android 我如何判断“是否”;内联“;工作?
我有一个工作应用程序,我需要加快速度。我设置了评测(请参阅以了解详细信息),它似乎报告了每个函数所用的时间。我找不到一种方法来发现函数不同子部分所消耗的时间 然后,我在一些经常访问的小函数的声明中插入了关键字“inline”,希望能有一些加速。但当我再次分析时,我看到了相同的函数列表,包括我内联生成的函数。这让我怀疑内联关键字是否刚刚被忽略 我模糊地记得,对于某些编译器,内联关键字是编译器可以选择性忽略的东西,这取决于可用内存量等因素 那么,我可以做一些检查来确认“inline”关键字是否真的完成了它的工作吗?您可以尝试:Android 我如何判断“是否”;内联“;工作?,android,c++,android-ndk,Android,C++,Android Ndk,我有一个工作应用程序,我需要加快速度。我设置了评测(请参阅以了解详细信息),它似乎报告了每个函数所用的时间。我找不到一种方法来发现函数不同子部分所消耗的时间 然后,我在一些经常访问的小函数的声明中插入了关键字“inline”,希望能有一些加速。但当我再次分析时,我看到了相同的函数列表,包括我内联生成的函数。这让我怀疑内联关键字是否刚刚被忽略 我模糊地记得,对于某些编译器,内联关键字是编译器可以选择性忽略的东西,这取决于可用内存量等因素 那么,我可以做一些检查来确认“inline”关键字是否真的完
- 检查编译器的程序集或机器代码输出(无论是反汇编还是仅使用
或android拥有的任何工具检查函数符号),或者使用调试器逐步执行nm
- 使用编译器pragma/属性强制内联(例如,如果可用),如果您的分析结果不受影响,那么可能编译器已经内联了
- 检查您的分析文档,确保您在进行分析时不会禁止内联
正如您所记得的,
inline
(以及在其类中定义的隐式内联的成员函数)只是编译器的提示。有些人认为,这只是管理一个定义规则问题的便捷方法,但是你必须检查个人C++编译器的代码,看看这些关键词是否真的毫无意义。编译器可能会使用各种度量来确定何时内联,包括影响的优化标志、外联函数的大小、函数调用的次数(例如,如果只有一个函数,为什么不内联一个大函数?)等等。添加always_inline会使函数名从概要文件报告中消失。这足以证明,对我来说,它以前不是内联的,现在是:-)@Mick:酷-但百万美元的问题是。。。速度快吗?:-)我想是的,但我一直受着这个问题的困扰,把事情弄糊涂了:@Mick:听起来很棘手。。。20%是相当可观的。我对android或OpenCV一无所知,所以希望其他人能在这方面帮助你。干杯