如何判断"inline"是否有效?
How can I tell if "inline" worked?
我有一个工作的应用程序,我需要加速。我设置了分析(请参阅此处了解详细信息),它似乎报告了每个函数所花费的时间。我找不到一种方法来发现函数的不同子部分所消耗的时间。
然后,我在一些经常访问的小函数的声明中插入关键字"inline",希望能提高一些速度。但是当我再次分析时,我看到了相同的函数列表,包括我设置为内联的函数。这让我怀疑inline关键字是否被忽略了。我有一个模糊的回忆,在一些编译器中,内联关键字是编译器可以选择性地忽略的东西,这取决于可用的内存量。
那么,我可以做一些检查来确认"inline"关键字是否已经完成了它的工作?
你可以试试:
-
检查编译器的汇编或机器码输出(是否反汇编或只是检查函数符号与
nm
或android的任何),或逐步通过调试器 -
使用编译器pragma/属性强制内联(如果可用,例如GCC有一个函数属性
always_inline
),如果你的分析结果没有受到影响,那么可能编译器已经内联了 -
检查你的分析文档,以确保你正在做的分析没有禁止内联
正如您回忆的那样,inline
(以及在其类中定义的隐式内联成员函数)只是对编译器的提示。有些人认为它们只是管理一个定义规则问题的方便方法,但是你必须检查个别c++编译器的代码,看看关键字是否真的是, 这些天没有意义。编译器可能会使用各种指标来确定何时内联,包括影响的优化标志,出线函数的大小,对函数的调用次数(例如,如果只有一个,为什么不内联一个大函数?)等。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 激励'inline'说明符的真实世界示例?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- C++中的"inline"关键字
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- boost 是否使用 C++11 "inline namespaces" 来避免运行时出现 ABI 不兼容错误?
- 如何判断"inline"是否有效?