gcc - When can/will a function be inlined in C++? Can inline behavior be forced? -
i trying expected behavior when use keyword inline. tried calling function in different files, templating function, using different implementation of inline function, whatever do, compiler never inlining function.
so in case compiler chose inline function in c++ ?
here code have tried :
inline auto add(int i) -> int { return i+1; } int main() { add(1); return 0; } in case, get:
add(int): pushq %rbp movq %rsp, %rbp movl %edi, -4(%rbp) movl -4(%rbp), %eax addl $1, %eax popq %rbp ret main: pushq %rbp movq %rsp, %rbp movl $1, %edi call add(int) movl $0, %eax popq %rbp ret or again,
template<typename t> inline auto add(const t &i) -> decltype(i+1) { return i+1; } int main() { add(1); return 0; } and got:
main: pushq %rbp movq %rsp, %rbp subq $16, %rsp movl $1, -4(%rbp) leaq -4(%rbp), %rax movq %rax, %rdi call decltype ({parm#1}+(1)) add<int>(int const&) movl $0, %eax leave ret decltype ({parm#1}+(1)) add<int>(int const&): pushq %rbp movq %rsp, %rbp movq %rdi, -8(%rbp) movq -8(%rbp), %rax movl (%rax), %eax addl $1, %eax popq %rbp ret i used https://gcc.godbolt.org/ assembly code here, tried on machine clang , gcc (with , without optimization options).
edit:
ok, missing optimization options. if set gcc use o3 optimization level, method inlined.
but still. how gcc, or compiler, know when better inline function or not ?
as rule, code always inlined if specify:
__attribute__((always_inline)) eg (from gcc documentation):
inline void foo (const char) __attribute__((always_inline)); though never idea force compiler inline code.
you may set high optimization level (though o flag) achieve maximum inlining, more details please see gcc documentation
inlining controlled number of parameters. can set them using -finline-* options. can have @ them here
Comments
Post a Comment