Điều này có nghĩa là con trỏ cơ sở hoặc con trỏ ngăn xếp thực sự đang di chuyển xuống các địa chỉ bộ nhớ thay vì đi lên? Tại sao vậy?
Có, các push
hướng dẫn làm giảm con trỏ ngăn xếp và ghi vào ngăn xếp, trong khi pop
thực hiện ngược lại, đọc từ ngăn xếp và tăng con trỏ ngăn xếp.
Điều này có phần lịch sử ở chỗ đối với các máy có bộ nhớ hạn chế, ngăn xếp được đặt ở vị trí cao và hướng xuống dưới, trong khi đống được đặt thấp và lớn lên. Chỉ có một khoảng trống của "bộ nhớ trống" - giữa heap & stack và khoảng cách này được chia sẻ, một trong hai có thể phát triển thành khoảng trống khi cần thiết. Do đó, chương trình chỉ hết bộ nhớ khi stack và heap va chạm không để lại bộ nhớ trống.
Nếu cả stack và heap đều phát triển theo cùng một hướng, thì có hai khoảng trống và stack không thể thực sự phát triển thành khoảng trống của heap (ngược lại cũng có vấn đề).
Ban đầu, bộ xử lý không có hướng dẫn xử lý ngăn xếp chuyên dụng. Tuy nhiên, khi hỗ trợ ngăn xếp đã được thêm vào phần cứng, nó đã đưa mô hình này đi xuống và bộ xử lý vẫn theo mô hình này ngày hôm nay.
Người ta có thể lập luận rằng trên máy 64 bit có đủ không gian địa chỉ để cho phép nhiều khoảng trống - và như một bằng chứng, nhiều khoảng trống nhất thiết phải xảy ra khi một tiến trình có nhiều luồng. Mặc dù điều này không đủ động lực để thay đổi mọi thứ xung quanh, vì với nhiều hệ thống khoảng cách, hướng phát triển được cho là tùy ý, do đó, truyền thống / khả năng tương thích sẽ mở rộng quy mô.
Bạn sẽ phải thay đổi các hướng dẫn ngăn xếp xử lý CPU để thay đổi hướng của ngăn xếp, nếu không từ bỏ việc sử dụng dành riêng đẩy & popping hướng dẫn (ví dụ như push
, pop
, call
, ret
, những người khác).
Lưu ý rằng kiến trúc tập lệnh MIPS không có chuyên dụng push
& pop
, do đó, việc phát triển ngăn xếp theo một hướng là điều thực tế - bạn vẫn có thể muốn bố trí bộ nhớ một khoảng trống cho một quy trình xử lý đơn, nhưng có thể tăng ngăn xếp lên trên và heap hướng xuống dưới Tuy nhiên, nếu bạn đã làm điều đó, một số mã varargs C có thể yêu cầu điều chỉnh trong nguồn hoặc trong thông số dưới mức.
(Trên thực tế, vì không có xử lý ngăn xếp chuyên dụng trên MIPS, chúng tôi có thể sử dụng gia tăng trước hoặc sau hoặc giảm trước hoặc sau khi đẩy lên ngăn xếp miễn là chúng tôi sử dụng đảo ngược chính xác để bật ra khỏi ngăn xếp và cũng giả sử rằng hệ điều hành tôn trọng mô hình sử dụng ngăn xếp đã chọn. Thật vậy, trong một số hệ thống nhúng và một số hệ thống giáo dục, ngăn xếp MIPS được phát triển lên.)
-4(%rbp)
hoàn toàn không di chuyển con trỏ cơ sở và+4(%rbp)
không thể có khả năng hoạt động.