Stos to coś, co układa się oddolnie.
Dlatego stos wywołań dodaje nowe elementy do stosu, gdy wywoływane są funkcje, a elementy są usuwane ze stosu, gdy każda funkcja kończy się, aż stos jest pusty, a następnie program się kończy.
Jeśli powyższe informacje są poprawne, dlaczego ludzie odnoszą się do sterowania przesuwaniem „w górę” stosu wywołań? Z pewnością kontrola przesuwa się w dół stosu wywołań, aż osiągnie dno.
Odpowiedzi:
Istnieją dwa możliwe powody tego użycia:
W kontekście wyjątków formant przechodzi do funkcji / metody wywołującej, a ta hierarchia wywołań jest zazwyczaj wizualizowana za pomocą głównej metody na górze, a wywołania metod tworzą hierarchię w dół, ze zmniejszającym się poziomem abstrakcji. W tej hierarchii wyjątek przesuwa się w górę.
Rzeczywisty stos programów w normalnej aplikacji x86 jest odwrócony, tzn. Rośnie w dół. Instrukcje kodu maszynowego PUSH / PUSHW / PUSHD zmniejszają wskaźnik stosu. Inne architektury mogą współdzielić ten model.
źródło
Wszystko zależy od definicji słów; co dokładnie masz na myśli przez słowa „góra” i „dół” w tym kontekście, a także na temat implementacji systemu operacyjnego lub architektury komputera.
Pamiętam, jak dawno temu, kiedy programowałem na Commodore 64. Pamięć między adresami 0800 $ (2048) i 9FFF (40959) była zarezerwowana dla programów BASIC. Kod twojego programu BASIC był przechowywany zaczynając od niższego adresu (0800 $, stamtąd rośnie). Stos do przechowywania zmiennych i adresów zwrotnych podprogramów zaczynał się na górze (9FFF) tego zakresu i rozwijał się w kierunku niższych adresów. W tym kontekście logiczne było widzenie stosu rosnącego w dół, a gdy wracasz z podprogramu, ramka stosu podprogramu została odrzucona poprzez zwiększenie wskaźnika stosu, abyś mógł powiedzieć, że „przesuwasz się w górę stosu”, gdy powrót z podprogramu.
Nie wiem, jak to działa na nowoczesnych wersjach na przykład procesorów Windows lub Intel x86. Być może stos działa odwrotnie, tzn. Rośnie z niższych adresów na wyższe. W takim przypadku prawdopodobnie użyłbyś słów „góra”, „dół” i „góra”, „dół” dokładnie na odwrót.
źródło
Odniesienie:
http://cslibrary.stanford.edu/102/PointersAndMemory.pdf (p15)
źródło
Jeśli konceptualizujesz stos jako rzecz oddolną, jak cylinder z piłkami tenisowymi w normalnej rzeczywistości grawitacyjnej, wówczas sterowanie przesuwa się w górę stosu, gdy wywoływane są funkcje. Po zakończeniu funkcji kontrolka przesuwa się w dół stosu.
Jeśli konceptualizujesz stos jako rzecz z góry na dół, jak ten sam cylinder piłek tenisowych, ale z odwróconą grawitacją, wówczas sterowanie przesuwa się w górę stosu, gdy wywoływane są funkcje, i w górę stosu, gdy funkcje są kompletne.
Oba są tylko modelami w twojej głowie i są w zasadzie całkowicie arbitralne. Jeśli chcesz, możesz to pojąć jako side-side, ale możesz mieć problemy z komunikacją z ludźmi. Osobiście uważam, że jeśli A wywołuje B, a B wywołuje C, to C jest dolną częścią stosu (odwrócona rzeczywistość grawitacyjna), a jeśli wyjątek występuje w C, chcesz przenieść ten wyjątek „do” na A. Myślę, że może to być bardziej powszechne użycie języka, ponieważ wydaje się, że C jest głęboko, a A jest górą. Pierwsza funkcja jest dla mnie bardziej intuicyjna, a funkcje pogłębiają się przy każdym połączeniu.
źródło