代碼區html
程序被操做系統加載到內存時,全部可執行的代碼被加載到代碼區,也叫代碼段,存儲程序的代碼指令。程序運行時,這段區域數據不可被修改只能夠被執行。c++
靜態區程序員
程序中的靜態變量、全局變量存放在此區域(初始化的全局變量和靜態變量在一塊區域)。代碼執行期間一直佔用內存!函數
堆優化
堆是不連續的內存區域,得到的空間比較靈活,也比較大,通常速度比較慢,並且容易產生內存碎片,不過用起來最方便。須要程序員申請的內存空間,空間的釋放通常由程序員控制(好比new, delete, malloc, free)。當程序員沒有釋放該內存空間的時候,程序運行完畢時操做系統會對該內存空間進行回收。操作系統
棧code
棧是一塊連續的內存的區域,通常棧的大小都是預先設置好的,若是申請的空間超過棧的剩餘空間時,將提示overflow。存放的一般是變量一般是局部變量、函數參數等。htm
文字常量區對象
常量字符串就是放在這裏的。 程序結束後由系統釋放。blog
bss段
定義而沒有賦初值的全局變量和靜態變量,放在這個區域,一般只是記錄變量名和大小,至關於一個佔位符。
一個程序本質上都是由.bss
段、.data
段、.text
段三個組成的。.data
段包含三個部分:heap(堆)、stack(棧)和靜態數據區。.text
段存放代碼區。.bss
裏面裝載了未被初始化的數據;如圖:
示例以下:
int a = 0; //全局初始化區(靜態區) char *p1; //全局未初始化區 (BSS段) int main() { int b; //棧 char s[] = "abc"; //棧 char *p2; //棧 char *p3 = "123456"; //123456/0在常量區,p3在棧上。 static int c = 0; //全局(靜態)初始化區 (靜態區) p1 = (char *)malloc(10); //分配得10和20字節的區域就在堆區。 p2 = (char *)malloc(20); strcpy(p1, "123456"); //123456/0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一塊。 return 0; }
能夠聯合以前所寫的關於連接的一些總結,引用那張圖以下: