Od http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/Jak są dostępne zmienne lokalne funkcji ze stosu?
Oto sekwencja kroków, które ma miejsce, gdy funkcja jest nazywa:
- Adres instrukcji poza wywołaniem funkcji jest umieszczana na stosie. W ten sposób CPU zapamiętuje, dokąd się udać po powrocie funkcji .
- Pomieszczenie jest tworzone na stosie dla typu zwrotu funkcji. To jest teraz tylko symbol zastępczy.
- CPU przeskakuje do kodu funkcji.
- Bieżący wierzchołek stosu jest trzymany w specjalnym wskaźniku zwanym ramką stosu.
- Wszystko dodane do stosu po tym punkcie jest uważane za "lokalne" dla funkcji.
- Wszystkie argumenty funkcji są umieszczane na stosie.
- Instrukcje dotyczące funkcji rozpoczynają się.
- Zmienne lokalne są przesyłane na stos, tak jak są zdefiniowane.
nie jestem pewien, jak punkt # 6 dzieła. Jeśli wszystkie argumenty funkcji są umieszczone na stosie, w jaki sposób są dostępne?
Jeśli na przykład istnieją trzy argumenty a
, b
i c
i są umieszczane na stosie jak to z góry
| a |
| b |
| c |
| |
...
|___|
Teraz co się dzieje, gdy funkcja chce uzyskać dostęp c
? Czy pojawiły się a
i b
?
wydaje mi się niemożliwe, że krok 3 ma miejsce przed 6: powinno być * wewnątrz * kodu funkcji ciała o ocenie osoby dzwoniącej. Nonsens! – CapelliC