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

前端 未结 9 610
攒了一身酷
攒了一身酷 2020-12-01 11:30

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条回答
  •  遥遥无期
    2020-12-01 12:20

    [[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 
    
    

    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.

提交回复
热议问题