浩浩的家園 |
|
|||
長(zhǎng)征路上 |
日歷
統(tǒng)計(jì)
導(dǎo)航常用鏈接留言簿(1)隨筆檔案搜索最新評(píng)論
閱讀排行榜評(píng)論排行榜 |
1 //main.cpp
2 int a = 0; //a,全局變量,存儲(chǔ)在全局初始化區(qū) 3 char *p1; //p1,全局變量指針,全局未初始化區(qū)(注意,p1沒有new或者malloc,它是一個(gè)空指針,你亂用就是野指針,但是它是地址,本身也占32位的空間) 4 void main() 5 { 6 int b; //main()函數(shù)的棧區(qū) 7 char s[] = "abc"; //main()函數(shù)的棧區(qū) 8 char *p2; // p2也是指針,main()函數(shù)的棧區(qū) 9 char *p3 = "123456"; //123456\0在常量區(qū),p3在main()函數(shù)的棧區(qū) 10 static int c =0; //全局(靜態(tài))初始化區(qū) 11 p1 = (char *)malloc(10); 12 p2 = (char *)malloc(20); //分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。但是p1在全局區(qū),p2在main()函數(shù)的棧區(qū),你懂了嗎? 13 strcpy(p1, "123456"); // 123456\0放在常量區(qū),編譯器可能會(huì)將它與p3所指向 的"123456"優(yōu)化成一個(gè)地方 14 } 上面的一小段代碼,可以看出,一段代碼占用內(nèi)存,基本有一下幾種: 1、棧區(qū)(stack)— 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。 2、堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。 3、全局區(qū)(靜態(tài)區(qū))(static)—,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 - 程序結(jié)束后由系統(tǒng)釋放。 4、文字常量區(qū) —常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放 。 5、程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。
|
![]() |
|
Copyright © 王浩 | Powered by: 博客園 模板提供:滬江博客 |