我有一个工作的应用程序,我需要加快。我设置了分析(有关详细信息,请参阅here),该分析似乎报告了每个函数需要多长时间。我无法找到一种方法来发现在函数的不同子部分中消耗的时间。
然后我插入了关键字" inline"在一些经常访问的小函数的声明中希望加速一些。但是当我再次描述时,我看到了相同的功能列表,包括我内联的功能。这让我怀疑是否刚刚忽略了内联关键字。
我有一个模糊的回忆,对于某些编译器,inline关键字是编译器可以选择忽略的东西,具体取决于可用内存量等。
所以我可以做一些检查来确认"内联"关键字实际上已经完成了它的工作?
答案 0 :(得分:1)
你可以尝试:
检查编译器的程序集或机器代码输出(无论是反汇编还是只是用nm
检查功能符号或者是否有android),或者单步执行调试器
使用编译器编译指示/属性来强制内联(如果可用,例如GCC has a function attribute always_inline
),如果您的分析结果没有受到影响,那么可能是编译器已经内联
检查您的分析文档,以确保您进行分析但不会禁止内联
正如您所回忆的那样,inline
(以及在其类中定义的隐式内联的成员函数)只是编译器的提示。有些人认为他们只是管理One Definition Rule问题的便捷方法,但您必须检查单个C ++编译器'代码,以查看关键字是否真的 这些日子毫无意义。编译器可能会使用各种指标来确定何时内联,包括影响中的优化标志,外联函数的大小,函数的调用次数(例如,如果只有一个,为什么不内联甚至大功能?)等。