Is it possible to force a function not to be inlined?

Viewed 54796

I want to force a little function not to be compiled as inline function even if it's very simple. I think this is useful for debug purpose. Is there any keyword to do this?

9 Answers

[[gnu::noinline]] attribute

We can also use the C++11 attribute specifier syntax with the non-standard gnu::noinline attribute: https://en.cppreference.com/w/cpp/language/attributes

It is just a matter of time until that gnu:: part gets dropped a future C++ standard to give a standardized [[noinline]] :-)

main.cpp

[[gnu::noinline]]
int my_func() {
    return 1;
}

int main() {
    return my_func();
}

Compile and disassemble:

g++ -ggdb3 -O3 -o main.out -std=c++11 -Wall -Wextra -pedantic-errors main.cpp
gdb -batch -ex 'disassemble/r main' main.out

With [[gnu::noinline]]:

   0x0000000000001040 <+0>:     f3 0f 1e fa     endbr64 
   0x0000000000001044 <+4>:     e9 f7 00 00 00  jmpq   0x1140 <my_func()>

Without [[gnu::noinline]]:

   0x0000000000001040 <+0>:     f3 0f 1e fa     endbr64 
   0x0000000000001044 <+4>:     b8 01 00 00 00  mov    $0x1,%eax
   0x0000000000001049 <+9>:     c3      retq

Tested on Ubuntu 19.10.

Related