關於堆和棧

 

網上找到的,有什麼不對的大家指出來,重新學習

1.棧是存放函數返回地址、參數、局部變量的。
堆是程序可以自由操作的內存,使用時先申請,用完之後釋放,如何使用完全由程序代碼控制。


2.棧在彙編代碼中表示成PUSH POP,用的是ESS段,SP寄存器
而堆不是,是在內存中讀寫,EDS段,

3.
C++包括兩種被應用程序管理的內存區域:一種稱爲棧(stack),另一種稱爲堆(heap)。
stack是函數被調用時自動分配的一塊內存區域,它主要用於保留函數內使用的變量及函數調用位置處下一條代碼的地址。
stack是後進先出,一個可變的指針指向stack的頂部。
本質上,當一個函數被程序調用時,當前的執行地址被放入stack,如果有參數傳遞到函數內,這些參數也被壓入stack,如果函數內有變量,它們也被壓入stack,如果函數執行時調用另一個函數,重複上面的過程。
當從函數返回時,stack指針指向存放先前執行地址的位置,也就是說,stack空間內分配的元素已被刪除。這就是爲什麼函數內的變量此時無效,因爲它們已經被推出了stack,另外要注意的是,聲明一個靜態變量,它沒有進入stack中。
另一種由應用程序管理的內存區域是堆(heap),heap是儲存應用程序的內存分配需求,並且分離於程序代碼和stack,heap中分配的對象的總的空間受限於計算機系統中有效的虛擬內存。
C程序通常使用malloc和free分配和回收heap內存,在C++中,使用new和delete.


4.函數裏的變量一般是stack,用new和malloc分配的是heap
stack是有大小限制的,heap的大小與系統虛擬內存差不多
stack運算比heap快
stack由編譯器來管理,heap由程序員new, malloc, delete, free


5.heap____自由存儲區
stack____局部存儲區
通常意義上的堆棧一般指的就是棧

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