內存分佈圖程序員
// 內核空間 應用程序不準訪問 ------------------------------- 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)—,全局變量和靜態變量的存儲是放在一塊的,初始化的 編譯器
全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另
一塊區域。 - 程序結束後由系統釋放。 編譯
四、文字常量區 —常量字符串就是放在這裏的。 程序結束後由系統釋放 變量
五、程序代碼區—存放函數體的二進制代碼。內存泄漏