【发布时间】:2014-02-07 05:44:56
【问题描述】:
当编译一个甚至不改变 ebp 寄存器的简单函数时,GCC 仍然保存函数开始时的值,然后在结束时恢复相同的值:
#add.c
int add( int a, int b )
{
return ( a + b );
}
gcc -c -S -m32 -O3 add.c -o add.S
#add.S
.file "add.c"
.text
.p2align 4,,15
.globl add
.type add, @function
add:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %eax
addl 8(%ebp), %eax
popl %ebp
ret
.size add, .-add
.ident "GCC: (GNU) 4.4.6"
.section .note.GNU-stack,"",@progbits
保持 ebp 不变,计算相对于 esp 的偏移量并保存 3 条指令,这似乎是一个简单的优化。
为什么 GCC 不这样做?
谢谢,
安德鲁
【问题讨论】:
-
stackoverflow.com/questions/5086230/… 的答案(出现在您问题旁边的“相关”列表中)也可以回答您的问题。
-
当我使用 gcc 4.8.1 执行此操作时,我确实优化了序言/结尾
-
嗨,这个问题确实回答了我的问题。有什么办法可以把我的指向那里吗?
标签: c gcc assembly compiler-optimization calling-convention