2010-03-02 88 views

回答

4

使用堆棧指針很好。畢竟它總是指向堆棧。如果函數中有任何推入或彈出指令,那麼跟蹤堆棧指針到函數參數的偏移量就會有點困難。當沒有幀指針時,它很難在調試器中返回堆棧。

使用幀指針可以使調試器和編譯器的作業變得更容易,但不一定需要。

設置幀指針需要一條指令,它使用了一個可能用於其他事情的寄存器。因此,使用堆棧指針是優化代碼的常用技巧。微軟的編譯器甚至有這個優化的名稱,他們稱之爲Frame Pointer Omission

+0

準確簡短的答覆。感謝您的信息John – 2010-03-02 02:43:54

+0

John,只是一個簡單的問題。當你說使用Frame指針調試器的工作變得容易時,你在說什麼調試器? – 2010-03-02 02:47:40

+0

任何調試器。當你有幀指針時,很容易重建調用堆棧並將其顯示在調試窗口中。如果沒有幀指針,調試器必須實際反編譯代碼才能顯示調用堆棧。 – 2010-03-02 02:56:39

3

專用幀指針寄存器絕對是常見ABI個比較流行的調用約定,但在使用不同的(可能更簡單)的調用約定時,這純粹是用於說明目的(添加一幀指針寄存器沒有什麼本質上的「錯誤」對那些片段只會讓他們更長時間,並沒有什麼實質性的變化)。

+0

感謝您的信息。此網站是目前該區塊中最好的 – 2010-03-02 02:43:01