現代C/C 編譯器(如clang、ICC、MSVC 和gcc)避免直接使用Push/ pop 指令。相反,他們透過使用更有效率的 sub/mov 或 lea 指令來優化程式碼。 Push/pop 仍然用於特定場景,例如保存/恢復被呼叫者保存的暫存器以及傳遞堆疊參數。
編譯器通常不支援逐漸建立堆疊幀使用推/彈出指令。這是因為它與錯誤處理和調試的展開機制衝突,並可能導致更大的展開資訊部分。此外,混合推送和 [rsp] 尋址模式可能會因堆疊同步微指令而導致 Intel CPU 效率低下。
雖然push/pop指令似乎有利於創建局部變量,但編譯器目前優先考慮更有效率和可靠的技術,如sub/mov或lea 。在某些情況下,仍然會使用push/pop,但它通常不用於漸進式堆疊框架建置。
以上是為什麼現代編譯器不使用 Push/Pop 來逐步建立堆疊框架?的詳細內容。更多資訊請關注PHP中文網其他相關文章!