程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C語言的代碼內存布局

C語言的代碼內存布局

編輯:C++入門知識

由以下3個部分組成:

1)BSS 段

   BSS段(bss segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態內存分配。未初始化數據段只在運行的初始化階段才會產生,因此它的大小不會影響目標文件的大小。

    bss段包含未初始化的全局變量和static變量。

2)data段

   數據段(data segment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域。數據段屬於靜態內存分配

  •   data段又包含三個部分:heap(堆)、stack(棧)和靜態數據區
  •   堆(heap)
  •   棧 (stack)
  •   靜態數據區 :存放的是程序中已初始化的全局變量、靜態變量和常量

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved