作者wowtiger (小虎)
看板ASM
标题Re: [问题] 请问gcc的 omit-frame-pointer的用意
时间Fri Dec 19 08:30:28 2008
※ 引述《allstarschh (allstars)》之铭言:
: man了一下
: dont keep the frame pointer in a register for functions
: that dont need one
: 我要问
: frame pointer是不是就是指ebp??
: 还有frame pointer 跟stack pointer不是都会存在register里吗?
: 如果不在register那就是在memory里喽~
: 这样存取的速度不就变慢了?
: 而且在memory 是不是pointer就可以把他的value改掉了吗?
: 什麽样的function可以不需要frame pointer在register里呢??
: 感谢
正常 function
push ebp
mov ebp, esp
mov eax, [ebp+08h] ; param
mov esp, ebp ; leave
pop ebp ;
ret
那 omit-frame-pointer
mov eax, [esp+04h] ; param
ret
就这样子而已
但是呢这不是万能的
遇到SSE运算
还是得用正常的
不然做不出 stack alignment 16 的东西
再来就是opcode长度
esp会比ebp多一个bytes
另外就是存取速度问题
因为esp时常变动
会比ebp固定来的效率差一点
这通常只是为了多一个register的作法
IA32大家都知道register通用的才6个
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.9.49
※ 编辑: wowtiger 来自: 125.225.9.49 (12/19 08:34)
1F:推 bobhsiao:推一下 原来是这个意思 12/19 23:21
2F:推 MPU:感谢强者回答 03/28 15:10