gpt4 book ai didi

c++ - 编译器会内联没有主体的函数吗?

转载 作者:行者123 更新时间:2023-11-30 01:47:47 24 4
gpt4 key购买 nike

让我们想象一个包含以下内容的 blah.h 头文件:

// A declaration without any code. We force inline
__attribute__((always_inline)) void inline_func();

还有一个 blah.cpp 源文件,其中包含:

#include "blah.h"

// The code of the inline function
void inline_func() {
...
}

// Use the inline function
void foo() {
inline_func();
}

问题是,编译器真的会内联 inline_func() 吗?代码应该与声明一起还是它们可以分开?

  • 假设没有 LTO
  • 注意 inline_func() 中的 (GCC) 强制内联修饰

最佳答案

内联是一个两步过程:* 是否可以?* 值得吗?

第一步是由编译器相当简单地决定的,第二步是一个复杂得多的启发式方法。因此,只考虑可能优化的好处是有意义的。

always_inline 表示忽略第二步。不影响第一考虑。现在,您还声明 LTO 已禁用,这意味着首先考虑的内联能力受到限制。这表明 LTOalways_inline 是完全不相关的,因为它们影响两种不同的内联注意事项。

无论如何,LTO 对您的示例并不重要。正在考虑的两个功能在同一个翻译单元中。似乎没有其他限制,例如递归、库调用或其他可观察到的副作用。这意味着应该可以内联,并且由于这是唯一的考虑因素,所以应该内联。

关于c++ - 编译器会内联没有主体的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31159856/

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