2013-06-30 49 views

回答

0

一個優勢是操作系統能夠輕鬆檢查進程(程序)中是否發生溢出。當堆棧從較高到較低時,堆段通常從較低到較高。如果兩個段逐漸增長爲重疊,則OS可以檢測到該過程中的溢出。

下面是C程序的內存佈局圖。希望這個幫助。

enter image description here

而且,這樣的選擇依賴於OS設計師。如果你是初學者,只是不關心它。認爲容易。

0

堆棧通常是向下生長的唯一東西,而其他所有東西都向上生長。但是,堆棧中的結構與堆中的相同結構相同:由內存中第一個字節的地址標識的內存區域,填充機制也相同。

所以,有趣的問題不是「爲什麼棧上的結構向上填充」,而是「棧爲什麼會向下延伸?」

答案很簡單:由於堆棧向下增長,堆棧上的對象由其第一個字節的地址標識,因此堆棧指針始終指向堆棧中的第一個元素。

這看起來很平凡,但它在機器級別上稍微簡化了一些事情。例如,在PowerPC上,有一條指令將一個值保存在一個指針的偏移處,並將該指針更新爲計算出的地址。該指令可以自動分配整個堆棧幀並將其鏈接到先前的堆棧幀,而不會以其他方式工作。 (我希望這不是太多技術細節...)