#include
void fun(void) { printf("fun"); }
int main(int argc, char *argv[]){ fun(); return 0;}
$ gcc -o test_ffp test.c $ gcc -fomit-frame-pointer -o test_ffp test.c
-rwxr-xr-x 1 Admin 40968 Jan 23 21:14 test.exe -rwxr-xr-x 1 Admin 40968 Jan 23 21:22 test_ffp.exe
$ gdb -q test.exe $ gdb -q test_ffp.exe
(gdb) disass main (gdb) disass main
Dump of assembler code for \
--ction main: Dump of assembler code for \
--ction main:
0x00401574 <+0>: push %ebp 0x00401573 <+0>: push %ebp
0x00401575 <+1>: mov %esp,%ebp 0x00401574 <+1>: mov %esp,%ebp
0x00401577 <+3>: and $0xfffffff0,%esp 0x00401576 <+3>: and $0xfffffff0,%esp
0x0040157a <+6>: call 0x401fb0 <__main> 0x00401579 <+6>: call 0x401fb0 <__main>
0x0040157f <+11>: call 0x401560 0x0040157e <+11>: call 0x401560
0x00401584 <+16>: mov $0x0,%eax 0x00401583 <+16>: mov $0x0,%eax
0x00401589 <+21>: leave 0x00401588 <+21>: leave
0x0040158a <+22>: ret 0x00401589 <+22>: ret
0x0040158b <+23>: nop 0x0040158a <+23>: nop
0x0040158c <+24>: xchg %ax,%ax 0x0040158b <+24>: nop
0x0040158e <+26>: xchg %ax,%ax 0x0040158c <+25>: xchg %ax,%ax
End of assembler dump. End of assembler dump.
(gdb) disass fun (gdb) disass fun
Dump of assembler code for \
--ction fun: Dump of assembler code for \
--ction fun:
0x00401560 <+0>: push %ebp 0x00401560 <+0>: sub $0x1c,%esp
0x00401561 <+1>: mov %esp,%ebp 0x00401563 <+3>: movl $0x404024,(%esp)
0x00401563 <+3>: sub $0x18,%esp 0x0040156a <+10>: call 0x402738
0x00401566 <+6>: movl $0x404024,(%esp) 0x0040156f <+15>: add $0x1c,%esp
0x0040156d <+13>: call 0x402738 0x00401572 <+18>: ret
0x00401572 <+18>: leave End of assembler dump.
0x00401573 <+19>: ret (gdb)
End of assembler dump.
(gdb)
文件大小是一样,结果fun函数的汇编代码中
push %ebp; leave; 没有啦.