棧 堆和靜態區

2021-06-18 21:56:12 字數 580 閱讀 5435

棧、堆和靜態區

對於程式設計師,一般來說,我們可以簡單的理解為記憶體分為三個部分:靜態區,棧,堆。

很多書沒有把把堆和棧解釋清楚,導致初學者總是分不清楚。其實堆疊就是棧,而不是堆。

堆的英文是heap;棧的英文是stack,也翻譯為堆疊。堆和棧都有自己的特性,這裡先不做

討論。再打個比方:一層教學樓,可能有外語教室,允許外語系學生和老師進入;還可能

有數學教師,允許數學系學生和老師進入;還可能有校長辦公室,允許校長進入。同樣,

記憶體也是這樣,記憶體的三個部分,不是所有的東西都能存進去的。

靜態區:儲存自動全域性變數和static變數(包括static全域性和區域性變數)。靜態區的內容

在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。

棧:儲存區域性變數。棧上的內容只在函式的範圍內存在,當函式執行結束,這些內容

也會自動被銷毀。其特點是效率高,但空間大小有限。

堆:由malloc系列函式或new操作符分配的記憶體。其生命週期由free或delete決定。

在沒有釋放之前一直存在,直到程式結束。其特點是使用靈活,空間比較大,但容易出錯。

--摘自《c語言深度剖析》

程式中的棧 堆和靜態儲存區

一般來說,我們可以簡單的理解為記憶體分為三個部分 靜態區,棧,堆。很多書沒有把把堆和棧解釋清楚,導致初學者總是分不清楚。其實堆疊就是棧,而不是堆。堆的英文是heap 棧的英文是stack,也翻譯為堆疊。堆和棧都有自己的特性。程式中的棧 棧是現代電腦程式裡最重要的概念之一 棧在程式中用於維護函式呼叫的...

靜態儲存區 堆區和棧區

記憶體分配有三種 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時...

堆區 棧區 靜態區 常量區還有???

常見的儲存區域可分為 由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏...