堆和棧的區別

2021-08-14 21:52:35 字數 295 閱讀 7432

首先,當乙個c/c++編譯的程式占用記憶體分為:棧(stack),堆(heap),全域性區(靜態區static),文字常量區以及程式**區。

堆:由程式設計師分配,若程式設計師在分配空間,到程式結束後沒有釋放則可能被作業系統(os)**

棧:由系統自動分配以及釋放,用來存放函式的引數值,區域性變數的值。

接著,聊一聊申請後系統的響應

棧:只要棧的剩餘空間大於所申請空間,系統將為程式提供記憶體空間,否則報異常,顯示為棧溢位。

最後聊一聊分配效率問題以及優缺點

棧:系統自動分配,速度很快,但不受程式設計師控制。

堆和棧區別

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...

堆和棧區別

管理方式 棧由編譯器自動管理 堆由程式設計師控制,使用方便,但易產生記憶體洩露。生長方向 棧向低位址擴充套件 即 向下生長 是連續的記憶體區域 堆向高位址擴充套件 即 向上生長 是不連續的記憶體區域。這是由於系統用鍊錶來儲存空閒記憶體位址,自然不連續,而鍊錶從低位址向高位址遍歷。空間大小 棧頂位址和...

堆和棧區別

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...