首先來看一下可執行文件中的段在內存中的佈局:數據結構
堆棧段:包含一種單一的數據結構---堆棧 函數
堆棧段的主要功能:佈局
1.爲函數內部聲明的局部變量提供存儲空間。spa
2.進行函數調用時,存儲與此有關的一些維護性信息---stack frame ,包括函數的調用地址,不適合裝入寄存器的參數和一些寄存器值的保存。code
3.用做暫時存儲區。blog
BBS(Block Started by Symbol)段:顧名思義,由符號開始的塊,主要保存沒有值的變量。內存
數據段:包含通過初始化的全局和靜態變量以及它們的值。io
文本段:包括程序的指令。class
1、首先來查看下堆棧段的大概地址:基礎
獲得結果:
2、接着,找出BBS段的地址:
獲得以下地址:
3、再找出數據段的段地址:
結果以下:
4、最後找出文本段的地址:
結果:
咱們在第一步的基礎上,聲明更多的局部變量,看看堆棧段的地址變化狀況:
這裏,在堆棧中壓入一個int 型的局部變量a,結果地址變化以下:
和一中的圖比較,發現棧頂地址由 0240FF24變到0240FF20 減小四個字節(正好爲一個int 型的長度)這也能夠看出,堆棧
在絕大多數的處理器中是向下增加的,朝着低地址的方向生長。