一個程序的運行起來后,其在內存中有5個區域
1. 程序代碼區
這個很簡單,代碼要執行,肯定要加載進內存, 我們不必關心。
2. 文字常量區
一般我們這樣定義一個字符串時,其是在文字常量區的:
char* s1 = "hello, world";
char* s2 = "hello, world";
if(s1 == s2)
printf("s1和s2指向同一個在文字常量區的字符串");
這里, s1和s2指向的是同一個字符串
3. 靜態存儲區(不會釋放,只到程序結束)
全局變量,靜態變量會放在這個區域,事實上,全局變量也是靜態的。
以上1,2,3三個區域的內存在程序起來的時候就開辟好了的。
4. 棧(}結束被自動釋放)
局部變量就是在棧里的。另外,函數調用時的參數也是在棧里的,這個現在不必關心
5. 堆(沒有被手動銷毀,他一直存在,直到程序結束. )
malloc或new出來的內存就是在堆里的,需要程序員自己管理清除。
//1.棧區:特性先進后出(后進先出)
//棧的特性
/*
int a=10;//1
int b=10;//2
int c=10;//3
//創建順序:123
//銷毀順序:321
//每一個函數都有一個棧幀
test();
int f=10;
*/
//函數中的變量一旦函數執行完成.全部被銷毀.
/*
char *p=test2();
printf("%s",p);
*/
//2.堆區:程序員手動分配的內存,並且需要程序員手動銷毀.(有幾個專門的內存函數) 特點:一旦分配不管在什么地方.沒有被手動銷毀,他一直存在,直到程序結束.
//3.常量區:我們編寫的程序種所有的常量都被放在常量區,直到程序結束為止
//4.靜態區:1.全局變量.(所有大括號外邊的變量).2.static標注的變量;
/*
for (int i=0; i<3; i++) {
static int count =0;//這句話只執行一次
//被static標注的變量會有一個初始值0;
count++;
printf("%d",count);
}
/
//5.代碼區:我們編寫的代碼被編譯器翻譯之后,存入代碼區
//malloc堆內存分配
//按照字節分配
//分配好的空間,使用什么類型的指針指向它,它就是什么類型的.
/*
int *p=malloc(4);
*p=10;
printf("%d",*p);
*/
/*
charchar *s=malloc(100);
strcpy(s, "大家好,我很