Wydawało mi się, iż rozumiem filozofię stosu do chwili,gdy zacząłem czytać akapit Stos i funkcje w książce c++ dla każdego. Autorzy tak to pogmatwali, że nie wiem. Chyba 20 raz to już dzisiaj czytam.
"1. Zwiększany jest adres we wskaźniku instrukcji i wskazuje on instrukcję następną po tej, która wywołuje funkcję. Ten adres jest następnie umieszczany na stosie; stanowi adres powrotu z funkcji."
Nie rozumiem. Czy zwiększenie adresu we wskaźniku instrukcji oznacza "zdjęcie talerza" ze stosu? ...czy dołożenie go? Bo zgodnie z wykonywanym kodem programu, kod wykonywany jest przecież od góry w dół wers po wersie.
"2. Na stosie jest tworzone miejsce dla zadeklarowanego typu wartości zwracanej przez funkcję.
Gdy zwracany typ jest zadeklarowany jako int, w przypadku systemu z dwubajtowymi
liczbami całkowitymi, na stos są odkładane dwa kolejne bajty, ale nie jest w nich umieszczana
żadna wartość („odpady”, które się w nich dotąd znajdowały, pozostają tam nadal)."
No za tym jeszcze jako tako nadążam, ale...
"3. Do wskaźnika instrukcji jest ładowany adres wywoływanej funkcji (ten adres jest zawarty w kodzie aktualnie wykonywanej instrukcji wywołania funkcji), dzięki czemu następna wykonywana instrukcja będzie już instrukcją funkcji."
O co chodzi z tym adresem wywoływanej funkcji? Wydawało mi się, iż adresem funkcji jest jej nazwa np funkcja(){}. To "{}" jest przecież nazywane ciałem funkcji. No to o jaki adres chodzi,bo się już pogubiłem. Czy oni przez adres mają na myśli właśnie nazwę funkcji?
"4. Odczytywany jest adres bieżącego szczytu stosu, następnie zostaje on umieszczony w specjalnym wskaźniku nazywanym ramką stosu (ang. stack frame). Wszystko, co zostanie umieszczone na stosie od tego momentu, jest uważane za „lokalne” dla funkcji."
Pogubiłem się. Co jest gdzie? Adres bieżącego szczytu stosu? Ok. Ale oni wcześniej pisali, iż to,co jest nad stosem, to odpady a nie rzeczy "lokalne". A może coś mi się pomyliło;-) No cóż, takie mam wrażenie;-)
"5. Na stosie umieszczane są argumenty funkcji.
6. Wykonywana jest instrukcja wskazywana przez wskaźnik instrukcji (następuje wykonanie pierwszej instrukcji w funkcji).
7. W trakcie ich definiowania, lokalne zmienne zostają umieszczane na stosie."
Myślę, że jeśli załapię i poukładam tamte rzeczy, za którymi nie nadążam, to ostatnie trzy punkty nie będą trudne do zrozumienia. Chodzi też o to, że mam kłopot ze stworzeniem w głowie poukładanej logiki miedzy tymi wszystkimi punktami. Pozostaje też pytanie czy znajdzie się tu osoba, która znajdzie czas i ochotę w miarę krótko mi to jakoś pomóc zrozumieć i poukładać.
No cóż, z góry dzięki;-)