c – g没有内联函数
发布时间:2020-12-16 06:45:46 所属栏目:百科 来源:网络整理
导读:有这样的代码: int fun1(){ return 2 + 3;}inline int fun2(){ return 4 + 5;}int main(){ int a = fun1(); int b = fun2(); return 0;} 和相应的汇编代码: .file "prog47.cpp" .text.globl _Z4fun1v .type _Z4fun1v,@function_Z4fun1v:.LFB0: .cfi_startp
有这样的代码:
int fun1(){ return 2 + 3; } inline int fun2(){ return 4 + 5; } int main(){ int a = fun1(); int b = fun2(); return 0; } 和相应的汇编代码: .file "prog47.cpp" .text .globl _Z4fun1v .type _Z4fun1v,@function _Z4fun1v: .LFB0: .cfi_startproc .cfi_personality 0x0,__gxx_personality_v0 pushl %ebp .cfi_def_cfa_offset 8 movl %esp,%ebp .cfi_offset 5,-8 .cfi_def_cfa_register 5 movl $5,%eax popl %ebp ret .cfi_endproc .LFE0: .size _Z4fun1v,.-_Z4fun1v .section .text._Z4fun2v,"axG",@progbits,_Z4fun2v,comdat .weak _Z4fun2v .type _Z4fun2v,@function _Z4fun2v: .LFB1: .cfi_startproc .cfi_personality 0x0,-8 .cfi_def_cfa_register 5 movl $9,%eax popl %ebp ret .cfi_endproc .LFE1: .size _Z4fun2v,.-_Z4fun2v .text .globl main .type main,@function main: .LFB2: .cfi_startproc .cfi_personality 0x0,-8 .cfi_def_cfa_register 5 andl $-16,%esp subl $16,%esp call _Z4fun1v movl %eax,12(%esp) call _Z4fun2v # why fun2 is called? movl %eax,8(%esp) movl $0,%eax leave ret .cfi_endproc .LFE2: .size main,.-main .section .note.GNU-stack,"",@progbits 为什么函数fun2没有内联并像普通函数一样被调用?我已经读过内联关键字只是提示编译器,它不需要内联函数,但是fun2的定义非常简单,因此可以内联.如何强制g内联函数? 解决方法
GCC有一个强制内联的属性:always_inline
inline int fun2() __attribute__((always_inline)); inline int fun2() { return 4 + 5; } 将使其适用于任何优化设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |