程式執行時記憶體管理

2021-09-06 16:52:11 字數 976 閱讀 8935

1,管理執行階段記憶體空間分配

malloc()/new;

int *pn = new int(儲存的型別,記憶體根據此設定相應儲存位元組的記憶體)

pn是記憶體位址(所以 當宣告乙個變數的指標變數時沒初始化,宣告後再來初始化則pn 接收的應該是變數在記憶體中的位址 &variablename);

*pn是儲存在記憶體的值 用於給所指向記憶體中的變數賦值;

為乙個資料物件(結構,基本型別)獲得並指定分配記憶體格式

typename pointer_name = new typename;

指定需要什麼樣的記憶體和用來宣告合適的指標

常規變數nights和指標變數值都儲存在被稱為棧(stack)的記憶體區域,而new從被稱為堆(heap)或自由儲存區(free store)的記憶體區域分配記憶體;

int b;

//int *pd = &b;

pd = &b;

*pd = 100;

delete 使用完記憶體後,能夠將其歸還給記憶體池,

eg.釋放上面new申請的記憶體區域

delete ps;將釋放ps指向的記憶體,但不會刪除指標本身,指標可以再次執行別的記憶體位址;

配對的使用new/delete,不然很容易發生記憶體洩露(memory leak),被分配的記憶體再也無法使用了,神馬叫洩露(就好類似你私家車車胎裡面的氣球,你給它放掉了,除非你再次充氣,不然它自己是不能恢復的哈!)

記憶體一旦洩露嚴重,程式將由於不斷尋找更多記憶體而終止;

delete不可用於釋放常規變數記憶體;

int * ps = new int;

delete ps;

delete ps;

int jugs = 5;

int * pi = &jugs;

delete pi; // not allowed memory,memoey not allocated by new

記住,請務必記住delete只能用來使用由new申請的記憶體;

程式執行時的記憶體

當乙個源 通過gcc編譯成a.out,執行a.out時 程式便開始了執行之旅 即程序 作業系統為程序分配堆疊空間,隨後把程式執行碼放入文字段,把程式經過初始化的全域性變數和靜態變數放入data 把程式為初始化的全域性變數和靜態變數放入bss段 並對bss段資料初始化為0 之後cpu 段指標指向mai...

程式執行時的記憶體分配

一 在程式執行期間,變數儲存空間有三種 1 靜態儲存區。內存在程式編譯的時候就已經分配好了,這塊內存在程式執行期間都存在,儲存全域性變數和靜態變數。2 棧儲存區。記憶體是在程式執行期間才分配的,函式內區域性變數及函式引數的儲存單元,當 函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理...

程式及其執行時記憶體分配解析

乙個c c 程式占用的記憶體可分為以下5種 2.堆區 一般由程式設計師分配和釋放,此堆和資料結構堆完全是兩回事,此堆的分配釋放方式類似於鍊錶。執行時操作。3.全域性 靜態區 全域性變數和靜態變數存放於此。而初始化和非初始化的全域性 靜態變數又放在不同的兩塊。程式結束由系統釋放。4.文字常量區 常量字...