我有以下的C++代碼什麼是C++和.LFE在彙編代碼中由GCC從C++程序生成的?
int factorial(int n){
if(n==0){
return 1;
}
return n*factorial(n-1);
}
int main(void){
factorial(5);
return 0;
}
當我創建使用匯編文件的g ++ -S factorial.cpp我得到如下:
.file "tail_call_opt.cpp"
.text
.globl _Z9factoriali
.type _Z9factoriali, @function
_Z9factoriali:
.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
subl $24, %esp
cmpl $0, 8(%ebp)
jne .L2
movl $1, %eax
jmp .L3
.L2:
movl 8(%ebp), %eax
subl $1, %eax
movl %eax, (%esp)
call _Z9factoriali
imull 8(%ebp), %eax
.L3:
leave
ret
.cfi_endproc
.LFE0:
.size _Z9factoriali, .-_Z9factoriali
.globl main
.type main, @function
main:
.LFB1:
.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
andl $-16, %esp
subl $16, %esp
movl $5, (%esp)
call _Z9factoriali
movl $0, %eax
leave
ret
.cfi_endproc
.LFE1:
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
我可以按照這個最,但什麼是.cfi和.LFE部分的用途? 我可以在哪裏瞭解更多關於gcc生成的程序集?
[Gnu彙編程序(GAS)使用的CFI指令是什麼?](http://stackoverflow.com/questions/2529185/what-are-cfi-directives-in-gnu-assembler-gas-用於) – Andrey 2010-08-25 10:11:09
這不是一個笨蛋。另一個問題不包括LFE。 – Puppy 2010-08-25 21:50:42