1. 程式人生 > >2.堆.棧和內存映射詳解

2.堆.棧和內存映射詳解

例子 color 註意 圖片 過程 size ont 大量 span

1.每個線程都有自己專屬的棧(stack),先進後出(LIFO)

2.棧的最大尺寸固定,超出則引起棧溢出

3.變量離開作用範圍後,棧上的數據會自動釋放

4.堆上內存必須手動釋放(C/C++)除非語言執行環境支持GC

5.棧還是堆?

--明確知道數據占用多少內存

--數據很小

--大量內存

--不確定需要多少內存

技術分享圖片


 

舉個例子

技術分享圖片

值得註意的是list_buf這個指針變量是在棧區,二list_buf這個指針指向的內存在堆區,還有函數的參數也是在棧區,而且是從右往左入棧

詳細過程如下,值得註意的是,函數的參數如果是引用傳遞,先在棧區創建一個變量,占四個自己,但指向了一個堆區的內存.

技術分享圖片

靜態區的值是一直不動的,而棧區的值是不斷變化的.

下面我們在linux下演示一下:

2.堆.棧和內存映射詳解