Re: [問題] 請問gcc的 omit-frame-pointer的用意
※ 引述《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)
推
12/19 23:21, , 1F
12/19 23:21, 1F
推
03/28 15:10, , 2F
03/28 15:10, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章