棧:就是遲到早退、先進後出;記憶體的分配、釋放管理都是由系統自己完成,不需要自己管理;
堆:是由自己動態申請的,如果不釋放,會一直存在的;申請記憶體的時候會用到關鍵字mallco
下面是乙個堆的申請返回和棧的記憶體分配返回 可以看出它們的生命週期和記憶體管理機制
//手動申請記憶體空間 這是儲存與堆中的
char* getmalloc(int num)
//返回申請的位址 然後析構p1 棧中不會存在p1,自動釋放
return p1;
}char* getstatck()
int _tmain(int argc, _tchar* argv)
//向tmp所指向的記憶體空間寫入資料,也就是給申請的記憶體空間中寫入資料
strcpy(tmp, "rose_grils");
//呼叫棧中記憶體的返回值 由於是區域性臨時變數 返回會存在問題
tmp = getstatck();
return 0;
}
靜態儲存區 堆區和棧區
記憶體分配有三種 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時...
C 靜態儲存區 棧區和堆區的區別
學習c 如果不了解記憶體分配是一件非常可悲的事情。而且,可以這樣講,乙個c 程式設計師無法掌握記憶體 無法了解記憶體,是不能夠成為乙個合格的c 程式設計師的。一 記憶體基本構成 可程式設計內存在基本上分為這樣的幾大部分 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存...
堆區和棧區
1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由系統 3 全域性區 靜態區static 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變...