內存四區
阿新 • • 發佈:2017-10-26
內存四區
內存四區包括
靜態區,代碼區,堆區,棧區 存儲地址一次下降
靜態區:
全局變量和靜態變量存儲在靜態區。
堆區
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
內存四區