C語言內存空間的使用--內存分佈圖

內存分佈圖程序員

 //
  內核空間    應用程序不準訪問
------------------------------- 3G
  棧空間      局部變量           RW
-----------
  運行時的堆空間 malloc
-----------
  全局的數據空間 全局變量(又能夠分爲:初始化的,未初始化)static RW位置: 初始化data 未初始化和static bss 
  只讀數據段    "hello" 字符串常量    R        const         位置:  TEXT
  代碼段        code                R                      位置:  TEXT
------------ 
0x0 :

 

一個由C/C++編譯的程序佔用的內存分爲如下幾個部分  數據結構

 

     一、棧區(stack)—   由編譯器自動分配釋放   ,存放函數的參數值,局部變量的值等。其  函數

  操做方式相似於數據結構中的棧。  code

  

    二、堆區(heap)   —   通常由程序員分配釋放,   若程序員不釋放,程序結束時可能由OS回  內存

  收   。注意它與數據結構中的堆是兩回事,分配方式卻是相似於鏈表,呵呵。  字符串

 int a[5];     malloc(5*sizeof(int))
char *p;
 p = (char *)malloc(100);
if(p == NULL){
  error
}

典型內存泄漏。p賦值沒釋放
void fun()
{
  char *p;
   p = (char *)malloc(100);
  return ;
}

 釋放: free(p);

 

三、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的  編譯器

  全局變量和靜態變量在一塊區域,   未初始化的全局變量和未初始化的靜態變量在相鄰的另  
  一塊區域。   -   程序結束後由系統釋放。  編譯

     

     四、文字常量區   —常量字符串就是放在這裏的。   程序結束後由系統釋放  變量

 

     五、程序代碼區—存放函數體的二進制代碼。內存泄漏

相關文章
相關標籤/搜索