一個程序的運行起來後,其在內存中有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, "你們好,我很