我尝试通过以下方式阻止gcc内联函数:
template <typename T, precision P> __attribute__ ((noinline))
void func () {}
但是它仍然内联函数。
有办法强制吗?
致谢
答案 0 :(得分:5)
让gcc相信此功能有副作用:
template <typename T, precision P> __attribute__ ((noinline))
void func () {
asm volatile("");
}
答案 1 :(得分:0)
__attribute__((noipa))
禁用的优化不仅仅是内联。特别是,它还会禁用注意到该函数是纯函数的优化(因此,除非使用返回值,否则可以删除调用)。 __attribute__((noinline))
的文档中明确提到了空函数,还需要添加例如asm("");
的内容,这样就不会对其进行优化。