c語言 堆棧

老是聽說堆棧 其實從來沒深究過
今天研究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);
發佈了29 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章