很多人不清楚的堆和棧問題

很多人不清楚的堆和棧問題

一、棧

1、簡介
(1)棧是爲執行線程留出的內存空間
(2)通常用後進先出(LIFO)的方式預留空間
(3) 從棧中釋放塊(free block)是指針的偏移
(4)每一個線程都有一個棧
(5)存儲在計算機RAM中

2、優勢
(1)棧比堆要快,存取模式使可以輕鬆的分配和重新分配內存(指針/整型只是進行簡單的遞增或者遞減運算),然而堆在分配和釋放的時候有更多的複雜的 bookkeeping 參與。
(2)在棧上的每個字節頻繁的被複用也就意味着它可能映射到處理器緩存中,所以很快
(3)在棧上創建變量的時候會擴展,並且會自動回收
(4)在編譯之前精確的知道需要分配數據的大小並且不是太大的時候,可以使用棧

二、堆

1、簡介
(1)堆(heap)是爲動態分配預留的內存空間
(2)每一個應用程序通常都只有一個堆
(3)存儲在計算機RAM中

2、特點
(1)在堆上的變量必須要手動釋放,不存在作用域的問題。數據可用 delete, delete[] 或者 free 來釋放
(2)運行期間不知道會需要多大的數據或者需要分配大量的內存的時候,建議使用堆
(3)數據項位置沒有固定的順序,可以以任何順序插入和刪除
(4)堆包含一個鏈表來維護已用和空閒的內存塊

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