進程環境之C程式的儲存空間布局

來源:互聯網
上載者:User

從曆史上講,C程式一直由下面幾部分組成:

  • 本文段。這是由CPU執行的機器指令部分。通常,本文段是可共用的,所以即使是頻繁執行的程式(如文字編輯器、C編譯器和shell等)在儲存空間中也只需有一個副本,另外,本文段常常是唯讀,以防止程式由於意外而修改其自身的指令。
  • 初始化資料區段。(所有帶有初始值的全域變數)通常將此段稱為資料區段,它包含了程式中需明確地賦初值的變數。例如,C程式中出現在任何函數之外的聲明:

int maxcount = 99;

使此變數帶有其初值存放在初始化資料區段中。

  • 非初始化資料區段。(所有未帶初始值的全域變數)通常將此段稱為bss段,這一名稱來源於一個早期的彙編運算子,意思是“block started by symbol”(由符號開始的塊),在程式開始執行之前,核心將此段中的資料初始化為0或null 指標。出現在任何函數外的C聲明:

long sum[1000];

使此變數存放在非初始化資料區段中。

  • 。(局部變數和形參)自動變數以及每次函數調用時所需儲存的資訊都存放在此段中。每次調用函數時,其返回地址以及調用者的環境資訊(例如某些機器寄存器的值)都存放在棧中。然後,最近被調用的函數在棧上為其自動變數和臨時變數分配儲存空間。通過這種方式使用棧,可以遞迴調用C函數。遞迴函式每次調用自身時,就使用一個新的棧幀,因此一個函數調用執行個體中的變數集不會影響另一個函數調用執行個體中的變數。
  • 。通常在堆中進行動態儲存裝置分配。由於曆史上形成的慣例,堆位於非初始化資料區段和棧之間。

3017b /usr/bin/ b3171 /bin/sh

第4列和第5列分別以十進位和十六進位表示的三個段的總長度。

本篇博文內容摘自《UNIX環境進階編程》(第二版),僅作個人學習記錄所用。關於本書可參考:http://www.apuebook.com/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.