1. 程式人生 > >內存四區

內存四區

內存四區

內存四區包括

靜態區,代碼區,堆區,棧區 存儲地址一次下降


靜態區:

全局變量和靜態變量存儲在靜態區


堆區

malloc的變量放在堆區,堆區一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回 收 。註意它與數據結構中的堆是兩回事分配方式倒是類似於鏈表堆的增長方式由低地址向高地址


棧區

局部變量放在棧區,由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方

式類似於數據結構中的棧。

棧的分配時由高位地址向低位地址。且註意,函數參數的載入時由又到左。



這是一個前輩寫的,非常詳細 copy

//main.cpp  
int a = 0; //全局初始化區   
char *p1; //全局未初始化區   
main()   
{   
int b;// 棧   
char s[] = "abc"; //棧   
char *p2; //棧   
char *p3 = "123456"; 123456/0";//在常量區,p3在棧上。   
static int c =0; //全局(靜態)初始化區   
p1 = (char *)malloc(10);   
p2 = (char *)malloc(20);   
//分配得來得10和20字節的區域就在堆區。   
strcpy(p1, "123456"); //123456/0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。   
}

註意char *p3 = "123456";

printf("%s",p3);//這裏輸出的123456 而不是123456所在的地址。

技術分享




本文出自 “姑蘇城” 博客,請務必保留此出處http://ji123.blog.51cto.com/11333309/1976539

內存四區