若對memory stack稍有研究,便知道memory stack大致可分成.text(Code)、.data、BSS、heap、mapping for SO與stack
但為何在x86的stack是由上往下長呢?
基本上有幾種說法:
1. 因為heap已經由下往上了,所以stack要跟它對稱才可以善用空間
2. positive indexing:因為以前的處理器對於存取使用的offset僅可使用unsigned offset,所以沒有負數的前提下讓stack head保持在最下方,然後以unsigned offset存取上方的資料
還有看到一個說法是:
從top開始scan,等找到某區塊真的可以讀取到跟寫入一樣的值( accessible and writable),便代表找到了physical RAM的地址。如此便可以正確設定stack pointer的值,並提供類似於memory isolation的功能(不會碰到下面的其他區域)
但不確定這個解釋跟stack downward有什麼關係就是了
然後也不是每種架構的stack都是往下長,像ARM就可以選擇的樣子,然後8051是往上長。
ref: