C程式的儲存空間和布局

2021-10-23 12:23:02 字數 897 閱讀 6715

知道程式語言的構成,才可以去解析語言(編譯器的工作);

cpu執行的機器指令部分;

通常,正文段可共享---頻繁執行的程式在儲存器中也只需要乙個副本;

通常,正文段是唯讀的---防止程式意外修改其指令;

包含程式中需明確賦初值的變數;

程式開始執行前,核心將此段中的資料初始化為0或空指標;

自動變數(過程結束自動釋放的變數,乙個函式就是乙個過程)以及每次函式呼叫時所需儲存的資訊都存放在此段中;

每次函式呼叫時,其返回位址以及呼叫者的環境資訊(某些機器暫存器的值)都儲存在棧中;

最近被呼叫的函式在棧上為其自動和臨時變數分配儲存空間(棧動態分配---編譯器的工作);

通常,在堆中進行動態儲存分配;

堆位於未初始化資料段與棧之間(歷史形成的慣例);

c程式典型儲存空間的安排

動態儲存方式

在程式執行期間根據需要進行動態分配儲存空間的方式;

動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完立即釋放;

靜態儲存方式

在程式編譯時分配固定的儲存空間的方式;

變數(全域性變數、靜態變數)定義時就分頂儲存單元並一直保持不變,知道程式執行結束;

動態記憶體分配(堆):發生自強程式調入和執行時,動態地分配或者**儲存空間的分配記憶體的方法;

靜態記憶體分配:發生在程式編譯和鏈結的時,預先分配儲存空間(棧可以是靜態分配如全域性變數,也可以是動態分配;,棧動態分配是由編譯器進行釋放);

環境高階程式設計

c程式儲存空間布局

摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...

c程式儲存空間布局

摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...

C程式的儲存空間布局

下午突然想到了c程式的儲存空間布局,忘了,翻書溫習,記錄如下 乙個c程式的組成 正文段,初始化資料段 資料段 非初始化資料段 bss 棧,堆 下面簡單介紹下這些段 正文段 由cpu執行的機器指令部分。通常,正文段是可共享的,在儲存器中只需要有乙個副本即可,很多時候,正文段也是唯讀的,防止意外修改 初...