Từ http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/Các biến cục bộ chức năng được truy cập từ ngăn xếp như thế nào?
Dưới đây là trình tự các bước diễn ra khi một chức năng là gọi:
- Các địa chỉ của lệnh vượt ra ngoài gọi hàm được đẩy vào stack. Đây là cách CPU ghi nhớ nơi để đi sau khi trả về hàm .
- Phòng được tạo trên ngăn xếp cho loại trả về của hàm. Đây chỉ là một trình giữ chỗ cho bây giờ.
- CPU nhảy vào mã của hàm.
- Đầu hiện tại của ngăn xếp được giữ trong một con trỏ đặc biệt được gọi là khung ngăn xếp.
- Mọi thứ được thêm vào ngăn xếp sau thời điểm này được coi là "cục bộ" đối với hàm.
- Tất cả đối số chức năng được đặt trên ngăn xếp.
- Hướng dẫn bên trong của hàm bắt đầu thực hiện.
- Biến cục bộ được đẩy lên ngăn xếp khi chúng được xác định.
Tôi không chắc chắn về cách hoạt động của điểm số 6. Nếu tất cả các đối số hàm được đặt trên ngăn xếp, chúng được truy cập như thế nào?
Nếu ví dụ, có ba đối số a
, b
và c
và được đặt trên ngăn xếp như thế này từ trên
| a |
| b |
| c |
| |
...
|___|
Bây giờ những gì sẽ xảy ra khi chức năng muốn truy cập c
? a
và b
có xuất hiện không?
dường như không thể đối với tôi rằng bước 3 xảy ra trước 6: cần có * bên trong * mã chức năng cơ thể về đánh giá của người gọi. Vô lý! – CapelliC