0

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

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

但它仍然内联函数。

有办法强制吗?

问候

4

2 回答 2

5

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

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

演示

于 2019-01-22T13:19:12.993 回答
1

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

于 2019-01-22T22:20:22.200 回答