强制gcc不内联函数

时间:2019-01-22 13:07:33

标签: c++ gcc

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

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

但是它仍然内联函数。

有办法强制吗?

致谢

2 个答案:

答案 0 :(得分:5)

让gcc相信此功能有副作用:

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

demo

答案 1 :(得分:0)

__attribute__((noipa))禁用的优化不仅仅是内联。特别是,它还会禁用注意到该函数是纯函数的优化(因此,除非使用返回值,否则可以删除调用)。 __attribute__((noinline))的文档中明确提到了空函数,还需要添加例如asm("");的内容,这样就不会对其进行优化。