强制 gcc 不内联函数

Force gcc not to inline a function

本文关键字:函数 gcc 强制      更新时间:2023-10-16

我尝试通过以下方式阻止gcc内联函数:

template <typename T, precision P> __attribute__ ((noinline))
void func () {}

但它仍然内联了函数。

有没有办法强迫它?

问候

让 gcc 相信这个函数有副作用:

template <typename T, precision P> __attribute__ ((noinline))
void func () {
    asm volatile("");
}

演示

__attribute__((noipa))禁用

的不仅仅是内联优化。特别是,它还禁用了注意到函数是纯函数的优化(因此,除非使用返回值,否则可以删除调用)。__attribute__((noinline))的文档明确提到了空函数以及添加例如asm("");的需要,以便它们不会被优化掉。