C語言中記憶體堆和棧的區別是什麼

2021-03-07 06:44:22 字數 569 閱讀 6655

1樓:匿名使用者

給你寫個小例子說明吧,一個小函式。

void testfunction()

上面函式中,變數a的記憶體就在棧中,a的生命週期只在大括號內,出了testfunction的大括號這塊棧空間就被釋放了。

而上面函式通過呼叫malloc函式給pa分配了3*sizeof(int)個位元組長度的記憶體,這段記憶體就在堆中。

即使出了testfunction函式的大括號,這段記憶體也依然被佔用著。不過,由於pa這個指標的生命週期 出了大括號就結束了,所以無法再用pa來引用這塊記憶體了。

上面只是舉例,真正程式設計不會這樣寫,這樣pa指向的記憶體就無法被釋放了,造成記憶體洩露。

2樓:裘**郯妝

堆記憶體是用malloc或new分配的記憶體空間,棧是用關鍵字定義出變數的記憶體空間.有些時候必須用堆記憶體,如:連結串列.堆最好是用來存放大資料.而棧本身就小,但速度快.

3樓:餘長青威書

比較簡單的理解是堆要靠自己管理,棧是系統幫你管理的,一般堆空間很大適合放大型的資料結構,棧空間有限一般僅僅放是函式的引數和內部的臨時變數

c 堆和棧的區別,堆和棧的區別是啥

堆與棧的區別 記憶體的分配方式和 方式不同 棧是後進先出,可以用一個簡單程式例子可以體現出棧的後進先出 void test1 int num2 test3 void test2 int num3 int main int num1 test1 程式執行過程說明 先給num1分配記憶體,然後呼叫tes...

堆疊指的是堆還是棧,還是合體,堆和棧的區別是啥

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

C靜態儲存區,棧和堆的區別

靜態儲存區 記憶體bai在程式編譯的時候就du已經分配好,zhi這塊內dao 存在程式的整個執行回期間都存在。它主要存答放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器...