為什么棧地址從高到低生長,堆從低到高


這個問題與虛擬地址空間的分配規則有關,每一個可執行C程序,從低地址到高地址依次是:text,data,bss,堆,棧,環境參數變量;其中堆和棧之間有很大的地址空間空閑着,在需要分配空間的時候,堆向上漲,棧往下漲。

 

這樣設計可以使得堆和棧能夠充分利用空閑的地址空間。如果棧向上漲的話,我們就必須得指定棧和堆的一個嚴格分界線,但這個分界線怎么確定呢?平均分?但是有的程序使用的堆空間比較多,而有的程序使用的棧空間比較多。所以就可能出現這種情況:一個程序因為棧溢出而崩潰的時候,其實它還有大量閑置的堆空間呢,但是我們卻無法使用這些閑置的堆空間。所以呢,最好的辦法就是讓堆和棧一個向上漲,一個向下漲,這樣它們就可以最大程度地共用這塊剩余的地址空間,達到利用率的最大化!!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM