gpt4 book ai didi

c++ - 使用 -O3 编译时将函数标记为内联?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:44 24 4
gpt4 key购买 nike

C++ 允许您使用 inline 关键字注释函数。据我了解,这向编译器提供了一个内联函数的提示(但没有义务),从而避免了小的函数调用开销。

我有一些方法被调用得如此频繁以至于它们真的应该被内联。但是inline注解的函数需要在header中实现,所以这就使得代码不太整齐。此外,我认为内联是一种编译器优化,应该对程序员透明地发生,在它有意义的地方。

那么,我是否必须使用 inline 注释我的函数才能进行内联,或者当我使用 -O3 或其他编译时,GCC 是否在没有注释的情况下解决了这个问题适当的优化标志?

最佳答案

inline 只是对编译器的建议是不正确的并且具有误导性。将函数标记为内联有两种可能的影响:

  1. 将函数定义内联替换到函数调用的位置 &
  2. 某些放松 w.r.t One definition rule ,允许您在头文件中定义函数。

编译器可能执行也可能不执行#1,但它必须遵守#2。所以内联不仅仅是一个建议。一旦函数被标记为内联,就会应用一些规则。

作为一般准则,不要仅仅为了优化而将您的函数标记为内联。大多数现代编译器将在没有您帮助的情况下自行执行这些优化。如果您希望将函数包含在头文件中,请将您的函数标记为内联,因为这是在不破坏 ODR 的情况下将函数定义包含在头文件中的唯一正确方法。

关于c++ - 使用 -O3 编译时将函数标记为内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com