在執行乙個c語言程式時,此程式將擁有唯一的「記憶體四區」——棧區、堆區、全域性區、**區.
一、棧區
由編譯器自動分配釋放,存放函式的形參、區域性變數等。當函式執行完畢時自動釋放。
#includechar *getmem()
void main()
printf("tmp:%s\n", tmp);//輸出tmp:
system("pause");
return ;
}
記憶體分析:
二、堆區
一般由程式設計師手動分配釋放(動態記憶體申請與釋放),若程式設計師不釋放,程式結束時可能由作業系統**。
#include char *getmem(int num)
return p1;
}void main()
strcpy(tmp, "111222"); //向tmp做指向的記憶體空間中copy資料,注意不是向指標變數tmp中
printf("tmp:%s\n", tmp);//輸出tmp:111222
system("pause");
return ;
}
記憶體分析:
三、全域性區
用於存放全域性變數和靜態變數, 裡面細分有乙個常量區,字串常量和其他常量也存放在此。該區域是在程式結束後由作業系統釋放。
#include char * getstr1()
char *getstr2()
void main()
記憶體分析:
*函式呼叫:
1.在程式未執行結束時,main函式裡分配的空間均可以被其他自定義函式訪問;
2.自定義函式若在堆區(malloc動態分配記憶體等)或全域性區(字串常量等)分配的記憶體,即便此函式結束,這些記憶體空間也不會被系統**,記憶體中的內容可以被其他自定義函式和main函式使用
c語言記憶體四區( )
圖1 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方 式類似於資料結...
C語言記憶體四區
圖一 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 一 記憶體四區 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方...
C語言記憶體四區
1 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 一般由程式設計師分配並釋放,若程式設計師不釋放,程式結束時可能由作業系統 3 資料區 主要包括靜態全域性區和常量區。4 區 存放函式體的二進位制 分清楚變數的記憶體處於哪個區對於程式設計至關重要。乙個典型的,卻比較晦澀的例...