2011-02-16 28 views

回答

2

幀指針並不是真正需要正確執行的,有時除非有例外展開。動態堆棧增長通常需要某種類型的幀指針,但它並不依賴於特定的寄存器,而是通過正常的數據流分析進行分配。

基本上,將FP從固定寄存器賦值降級到僞寄存器,並使初始化受到死存儲消除的影響。所以第一個問題的答案是否定的,它並不總是省略它。

0

不是mips人,而是應該應用於任何系統的東西:如果堆棧需要在任何時候對齊,則需要使用框架來存儲原始指針(因爲堆棧地址和對齊方式可能不適用知道)

1

不,通常不需要幀指針。編譯器可以訪問與堆棧指針相關的局部變量,並且不需要特殊的幀指針。儘管如此,標準幀指針設置序列可以幫助調試崩潰的程序(即使不用-g進行編譯),因爲調試器可以使用幀指針信息來重新構建調用堆棧。沒有幀指針,它沒有信息來確定一個堆棧幀開始和下一個結束。

因此,在使用時,如果發生崩潰,您的交易績效會更加困難。如果你的代碼的性能關鍵部分是小循環,並且不調用任何函數,那麼省略幀指針也會帶來很小的優勢。