一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分
1、棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)名,局部變量的名等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
2、堆區(qū)(heap)— 由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。
3、全局區(qū)(靜態(tài)區(qū))(static)—全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放。
4、文字常量區(qū)—常量字符串就是放在這里的,程序結(jié)束后由系統(tǒng)釋放 。
5、程序代碼區(qū)— 存放函數(shù)體的二進(jìn)制代碼。
復(fù)制代碼 代碼如下:
int a = 0;//全局初始化區(qū)
char*p1;//全局未初始化區(qū)
main()
{
intb;//棧
chars[] = "abc";//棧
char*p2;//棧
char*p3 = "123456";//123456\0在常量區(qū),p3在棧上。
static int c =0;//全局(靜態(tài))初始化區(qū)
p1 = (char*)malloc(10);
p2 = (char*)malloc(20);//分配得來的10和20字節(jié)的區(qū)域就在堆區(qū)。
}
strcpy(p1, "123456"); 123456\0放在常量區(qū),編譯器可能會將它與p3所指向的”123456"優(yōu)化成一個地方。
【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!