Alokacja stosu

Prolog funkcji jest odpowiedzialny za przydzielanie miejsca na stosie dla zmiennych lokalnych, zapisane rejestrów, stos parametry i parametry rejestru.

Obszaru parametr jest zawsze na dole stosu (nawet, jeśli jest używany w dystrybucji), dzięki czemu zawsze będzie przylegających do adresu zwrotnego podczas każde wywołanie funkcji.Zawiera ona co najmniej cztery pozycje, ale zawsze za mało miejsca, aby pomieścić wszystkie parametry wymagane przez wszelkich funkcji, która może być wywołana.Należy zauważyć, że przestrzeń jest zawsze alokowana dla parametrów rejestru, nawet wtedy, gdy same parametry nigdy nie są adresem IP do stosu; wywoływany jest gwarantowane, że miejsca przydzielonego dla wszystkich jej parametrów.Adres domowy są wymagane dla argumentów rejestru, dlatego przyległy obszar jest dostępna w przypadku, gdy wywołana funkcja, należy wziąć adres listy argumentów (va_list) lub indywidualnych argument.Ten obszar zawiera również wygodne miejsce do zapisania rejestru argumentów podczas wykonywania thunk i jako opcja debugowania (na przykład, to sprawia, że argumenty łatwo znaleźć podczas debugowania, jeśli są one przechowywane na adresy domowe w kodzie prologu).Nawet jeśli wywołana funkcja ma mniej niż 4 parametry, te lokalizacje stos 4 skutecznie własnością wywołana funkcja i mogą być używane przez wywołana funkcja do innych celów, oprócz zapisywania tego parametru wartości rejestru.Ten sposób obiekt wywołujący może nie zostać zapisana informacji w tym regionie stosu przez wywołanie funkcji.

Jeśli miejsce jest przydzielane dynamicznie (dystrybucji) w funkcji, następnie nieulotna rejestru musi być używany jako wskaźnika klatki, aby oznaczyć podstawy stałej części stosu i tego rejestru musi być zapisany i zainicjowana w prologu.Należy zauważyć, że użyto dystrybucji wywołania do tej samej wywoływany z tego samego numeru mogą mieć różne adresy domowej dla ich parametrów rejestru.

Stos zostanie zachowany 16-bajtowy wyrównane, z wyjątkiem w prologu (na przykład po adres zwrotny jest wciśnięty) oraz, z wyjątkiem przypadku gdy wskazane w Typy funkcji dla pewnej kategorii funkcji ramki.

Poniżej przedstawiono przykład układu stosu gdzie wywołań funkcji A nie liść funkcjonować B.Prolog funkcji A ma już przydzielone miejsce dla wszystkich parametrów z rejestru i stosu wymagane przez B na dole stosu.Wywołanie wypycha adres zwrotny i B prolog przydziela miejsce dla swoich zmiennych lokalnych, nieulotna rejestrów i przestrzeń potrzebna na to, aby wywoływać funkcje.Jeśli B używa dystrybucji, miejsce jest przydzielane między lokalnym rejestrze zmiennej/nieulotnej Zapisz i obszaru stosu parametr.

Przykład konwersji AMD

Gdy funkcja B wywoła kolejną funkcję, adres zwrotny jest wysyłany pod adres domowy dla RCX.

Zobacz też

Informacje

Wykorzystanie stosu