內存中的5個區域:堆、棧、靜態區,代碼區

一個程序的運行起來後,其在內存中有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, "你們好,我很     
相關文章
相關標籤/搜索