防止gcc内联函数

Met*_*est 6 c linux x86 gcc

是否可以阻止gcc编译器内联特定函数.如果是这样,怎么样?

不要告诉我降低优化级别.我想要所有的优化,但标记一个特定的函数不被编译器内联,就像变量的情况下的volatile一样.

我想要这样做的原因是因为我的函数使用内联汇编定义的标签,gcc在内联函数时会搞砸,因为内联会导致gcc创建该标签的多个实例.

Céd*_*ien 13

您应该使用该noinline属性

像这样 :

void the_method_you_dont_want_to_inline() __attribute__ ((noinline))
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者在最近的GCC版本中:

__attribute__((noinline)) void the_method_you_dont_want_to_inline()
{
  ...
}
Run Code Online (Sandbox Code Playgroud)


Met*_*est 1

__attribute__(noinline)应放在第一位,如下所示。否则编译器会抱怨函数定义上不允许使用属性。

__attribute__(noinline) void my_function( void * arg )
{
  .....
}
Run Code Online (Sandbox Code Playgroud)