變量存儲:堆與棧

棧,是硬件,主要作用表現爲一種數據結構,是隻能在一端插入和刪除數據的特殊線性
表。允許進行插入和刪除操作的一端稱爲棧頂,另一端爲棧底。

棧按照後進先出的原則存儲
數據,最先進入的數據被壓入棧底,最後進入的數據在棧頂,需要讀數據時從棧頂開始彈出
數據
棧底固定,而棧頂浮動。棧中元素個數爲零時稱爲空棧。插入一般稱爲進棧(push),
刪除則稱爲出棧(pop)。 棧也被稱爲先進後出表,在函數調用的時候用於存儲斷點,在遞歸
時也要用到棧。

在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧
中,也可以將數據從棧頂彈出。
在 i386 機器中,棧頂由稱爲 esp 的寄存器進行定位。壓棧的
操作使棧頂的地址減小,彈出的操作使棧頂的地址增大

用途:棧在程序的運行中有着舉足輕重的作用。最重要的是,棧保存了一個函數調用時所需要
的維護信息,這常常被稱爲堆棧幀。棧一般包含以下兩方面的信息:
1)函數的返回地址和參數。
2)臨時變量:包括函數的非靜態局部變量及編譯器自動生成的其他臨時變量。

 堆

堆,是一種動態存儲結構,實際上就是數據段中的自由存儲區它是 C 語言中使用的一
種名稱,常常用於存儲、分配動態數據。堆中存入的數據地址向增加方向變動。
堆可以不斷
進行分配直到沒有堆空間爲止,也可以隨時進行釋放、再分配,不存在順序問題。
堆內存的分配常通過 malloc()、calloc()、realloc() 三個函數來實現。而堆內存的釋放則
使用 free() 函數。

 

堆和棧在使用時“生長”方向相反,棧向低地址方向“生長”,而堆向高地址方向“生長”。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章