gpt4 book ai didi

c - 在Linux内核中内联使用类型限定符的时机

转载 作者:行者123 更新时间:2023-12-03 09:55:22 24 4
gpt4 key购买 nike

Linux内核开发人员在Linux内核中大量使用inline类型限定符。
如果使用得当,它可以减少函数调用的成本。
如果不好,它可能会太大地放大图像大小,这会增加访问内存的成本。

他们如何判断何时使用inline类型限定符?

最佳答案

inline具有什么作用的详细信息特定于编译器。特定于编译器的扩展(例如__attribute__((always_inline))__forceinline)可能会更有用,因为它们具有更强大且更可预测的效果。

例如,对于Clang,如果函数的“成本”低于阈值,则该函数将内联。对于没有任何inline属性的函数,阈值设置为225,但是对于优化级别-Os-O2-O3,该阈值分别乘以0.333、1.500或1.667。使用inline时,阈值设置为487。因此,在使用较低级别进行编译时,尤其是在使用-Os(75 vs 487阈值)时,效果更加明显。您可以在https://godbolt.org上检查并尝试使用Clang的“优化输出”。

编译器不需要inline关键字来内联函数。尽管仍然存在某些功能禁用内联的情况,除非使用inline关键字。对于example,除非指定了-fPIC,否则GCC在构建共享库时不会在ELF目标上内联具有“默认”可见性的函数(-fno-semantic-interposition标志)。

最常见的建议是对代码进行“概要分析”,但是我发现它不是很有用,因为您将无法在所有函数上检查inline关键字的所有可能组合。这一切都是有经验的:C程序员通常知道编译器生成的代码是什么样子,他们还知道最终想要获得什么代码。

当前,C语言中inline的主要目标是:

  • 禁止对未使用的static inline函数(来自标题)发出警告
  • 实现extern inline函数。


  • 可以通过 through LLVM parameters -inline-threshold-inlinehint-threshold操纵Clang内联。

    在C++中, inline具有其他含义-内联函数生成“弱”符号,链接程序必须删除这些符号的重复项。在某些情况下,函数被视为隐式标记为 inline,但仅在语义上标记为。进一步添加 inline关键字至少可以在 Clang上增加内联阈值(从正常级别到“内联”级别)。

    关于c - 在Linux内核中内联使用类型限定符的时机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60694016/

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