程式段詳解

來源:互聯網
上載者:User

標籤:c聲明   靜態   自動分配   檔案   字元   參數   pre   全域變數   彙編   

1.程式碼片段(code或text)

  程式碼片段由各個函數產生,函數的每一個語句將最終經過編繹和彙編產生二進位機器代碼(具體生生哪種體繫結構的機器代碼由編譯器決定)。這部分地區的大小在程式運行前就已經確定,並且記憶體地區通常屬於唯讀, 某些架構也允許程式碼片段為可寫,即允許修改程式。在程式碼片段中,也有可能包含一些唯讀常數變數,例如字串常量等。

2.唯讀資料區段(RO Data)

  唯讀資料區段的特點是在運行中不需要改變。唯讀全域變數,唯讀局部變數,程式中使用的常量(const)等會在編譯時間被放入到唯讀資料區。  

3.讀寫資料區段(RW Data)

  讀寫資料區段又稱已初始化資料區段,表示可以讀也可以寫的資料區。通常已初始化的全域變數和局部靜態變數被放在了讀寫資料區段,如:在函數中定義static char b[ 100]={“ABCDEFG”};讀寫資料區的特點是必須在程式經過初始化,如果只定義,沒初始值,則不會產生讀寫資料區,而會定位為未初始化資料區(BSS)。

4. 未初始化資料區段(BSS:Block Started by Symbol)

  通常是指用來存放程式中未初始化的全域變數的一塊記憶體地區。屬於靜態記憶體配置,不是目標檔案中的一段。BSS段並不給該段的資料分配空間,只是記錄資料所需空間的大小。
5.堆(heap)

  堆記憶體只在程式運行時出現,一般由程式員分配和釋放(malloc free、new delete)。它的大小並不固定,可動態擴張或縮減。分配記憶體的函數所分配的記憶體空間在堆上,程式必須保證使用free釋放,否則會發生記憶體流失。

6.棧(stack)

  棧記憶體只在程式運行時出現,在函數內部使用的變數、函數的參數以及傳回值將使用棧空間,不包括static聲明的變數。棧空間由編譯器自動分配和釋放。由於棧的先進後出特點,所以棧特別方便用來儲存/恢複調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時資料的記憶體區。

 

再縷一縷:

1.全域的未初始設定變數存在於BSS段中,具體體現為一個預留位置;全域的已初始設定變數存於Data段中

2.程式碼片段、RO Data、RW Data及BSS這四個段都屬於程式中的靜態地區,堆和棧屬於程式的動態地區

3.經過編譯串連生產的二進位可執行代碼,只包含程式碼片段、RO Data、RW Data,BSS中的資料將會在運行前置0,在程式運行後才會包含堆和棧

 

Example:

 1 int a = 0;  //全域初始化區 rw data段 2 static int b=20;  //全域初始化區 rw data段 3 char *p1;  //全域未初始化區 bss段 4 const int A = 10; //ro data段 5  6 void main(void) 7 { 8   int b; //棧 9   char s[] = "abc"; //棧10   char *p2; //棧11   static int c = 0; //全域(靜態)初始化區 rw data段12   char *p3 = "123456"; //123456\0在ro data,p3在棧上。13   p1 = (char*) malloc(10);//分配得來的10和20個位元組的地區就在堆區14   p2 = (char*) malloc(20);15   strcpy(p1, "123456"); //123456\0在常量區,編譯器可能會將它與p3所指向的"123456"最佳化成一個地方16 17 18   free(p1);19   free(p2);20 }

 

程式段詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.