c程式一直由下列幾部分組成:
.正文段:
這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使使是經常執行的程式(如文字編輯程式,c編譯程式,shell等)在儲存器中也只需有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改其自身的指令。
.初始化資料段
通常將此段稱為資料段,它包含了程式中虛賦初值的變數。
例如,c程式中任何函式之外的說明:
int maxcount = 99;
使此變數以初值存放在初始化資料段中。
.非初始化資料段
通常將此段成為bss段,這一名稱**於早期匯程式設計序的乙個操作符,意思是「block started by symbol(由符號開始的塊)」,在程式開始執行之前,核心將此段初始化為0,函式外的說明:
long sum[1000];
使此變數存放在非初始化資料段中。
.棧自動變數以及每次函式呼叫時所需儲存的資訊都存放在此段中。每次函式呼叫時,其返回位址、以及呼叫者的環境資訊(例如某些機器暫存器)都存放在棧中。然後,新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴呼叫。
.堆通常在堆中進行動態儲存分配。由於歷史上形成的慣例,堆位於非初始化資料段頂和棧底之間。
c程式儲存空間布局
摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...
c程式儲存空間布局
摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...
C程式的儲存空間布局
下午突然想到了c程式的儲存空間布局,忘了,翻書溫習,記錄如下 乙個c程式的組成 正文段,初始化資料段 資料段 非初始化資料段 bss 棧,堆 下面簡單介紹下這些段 正文段 由cpu執行的機器指令部分。通常,正文段是可共享的,在儲存器中只需要有乙個副本即可,很多時候,正文段也是唯讀的,防止意外修改 初...