由以下3個部分組成:
1)BSS 段
BSS段(bss segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態內存分配。未初始化數據段只在運行的初始化階段才會產生,因此它的大小不會影響目標文件的大小。
bss段包含未初始化的全局變量和static變量。
2)data段
數據段(data segment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域。數據段屬於靜態內存分配。
3)text段
代碼段(text segment)通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,並且內存區域屬於只讀。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等。
eg:
如圖:
int a = 0; //全局初始化區(data) char *p1; //全局未初始化區(BSS) main() { static int c =0; //全局(靜態)初始化區(data) int b; //棧(data) char s[] = "abc"; //棧(data) char *p2; //棧(data) char *p3 = "123456"; //"123456\0"在常量區,p3在棧上。(都在data區) p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得來得10和20字節的區域就在堆區。(data) }
參考:http://www.nowamagic.net/librarys/veda/detail/2384