這個問題與虛擬地址空間的分配規則有關,每一個可執行C程序,從低地址到高地址依次是:text,data,bss,堆,棧,環境參數變量;其中堆和棧之間有很大的地址空間空閑着,在需要分配空間的時候,堆向上漲,棧往下漲。
這樣設計可以使得堆和棧能夠充分利用空閑的地址空間。如果棧向上漲的話,我們就必須得指定棧和堆的一個嚴格分界線,但這個分界線怎么確定呢?平均分?但是有的程序使用的堆空間比較多,而有的程序使用的棧空間比較多。所以就可能出現這種情況:一個程序因為棧溢出而崩潰的時候,其實它還有大量閑置的堆空間呢,但是我們卻無法使用這些閑置的堆空間。所以呢,最好的辦法就是讓堆和棧一個向上漲,一個向下漲,這樣它們就可以最大程度地共用這塊剩余的地址空間,達到利用率的最大化!!