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函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器...