今天研究c語言內存管理時終於有所瞭解了
一個32位的運行在保護模式下應用程序
無論是Linux 還是Windows
都給它分配一個4GB的平坦的內存空間
一個運行着的c程序所佔用的內存空間分爲
代碼區 初始化數據區 未初始化數據區 堆區 和 棧區
在地址上從高位到地位爲
(高位)
棧區
堆區
未初始化數據區(即BBS)
數據區
代碼區
(低位)
棧區存放函數的參數值、局部變量的值 ,
由編譯器自動分配釋放
比如實現函數的遞歸調用
堆區用於動態分配內存
一般由程序員來分配釋放
下面用一斷代碼來展示c程序內存分配
//main.c
int a = 0; //a是全局變量 在已初始化區
char *p1; //p1在BBS區(未初始化數據區)
main()
{
int b; //b在棧區
char s[] = "abc"; //s爲數組變量 在棧區
//“abc”是字符串常量 在已初始化數據區
char *p1,p2; //p1 p2都在棧區
char *p3 = "123456"; //p3在棧區 “123456”在已初始化數據區
static int c = 0; //c爲全局靜態數據 存在於已初始化數據區
//靜態數據會自動初始化
p1 = (char *)malloc(10); //新分配的10個字節位於堆區
p2 = (char *)malloc(20); //新分配的20個字節位於堆區
free(p1);
free(p2);
}