Jestem początkującym w języku asemblera i zauważyłem, że kod x86 emitowany przez kompilatory zwykle utrzymuje wskaźnik ramki nawet w trybie zwolnienia / optymalizacji, kiedy mógłby użyć EBP
rejestru do czegoś innego.
Rozumiem, dlaczego wskaźnik ramki może ułatwić debugowanie kodu i może być niezbędny, jeśli alloca()
zostanie wywołany w funkcji. Jednak x86 ma bardzo mało rejestrów, a używanie dwóch z nich do przechowywania położenia ramki stosu, gdy wystarczyłoby jedno, po prostu nie ma dla mnie sensu. Dlaczego pomijanie wskaźnika ramki jest uważane za zły pomysł, nawet w kompilacjach zoptymalizowanych / wydanych?