程式儲存器的分段
程式儲存器分為5段:text、data、bss、heap和stack段。每一段代表為某一特定目的預留的一塊專用儲存區。
text段有時又稱為程式碼段。程式碼段是儲存彙編後程式的機器語言指令的地方。由於高階控制結構和函式將被編譯成組合語言的分支、跳轉和呼叫指令,因而該段內指令的執行是非線性的。當程式執行時,EIP(擴充套件指令指標)被設定為text段的第一條指令。然後處理器按照迴圈做下面的事情:
- 讀EIP指向的指令。
- EIP增加指令的位元組長度
- 執行第1步讀取的指令。
- 跳轉到第1步。
text段禁用寫許可權,因為該段不用來儲存變數,而只用來儲存程式碼。這實際上可以防止人們修改程式程式碼。該段為只讀的另一個優點是:可被程式的不同副本所共享,使同時執行程式多次不出現任何的問題。還應該注意,這一儲存段有固定的大小,因為在它裡面沒有什麼可改變。
data段和bss段用來儲存全域性和靜態程式變數。 data段中充滿了整個程式執行過程中都要使用的已經初始化的全域性變數、字串和其他變數。bss段充滿了相應的未初始化的內容。雖然這些段是可以修改的,但它們也有固定的大小。
heap段用來儲存程式的其他變數。 關於heap段值得注意的一點是其大小是可變的,即堆的大小可以根據需要而變大或變小。heap段中的所有儲存單元由分配器和回收器演算法所管理。分配器在堆中為使用預留一部分儲存區域,而回收器取消預留的儲存區域,使該區域可以被下一次預留重新使用。堆的增大和縮小取決於預留使用的儲存區域的大小。堆從儲存器的低地址向高地址增長。
stack段的大小也是可變的,並且在函式呼叫時,stack段被用作中間結果暫存器來儲存斷點資訊。當一個程式呼叫函式時,函式將它自己的傳遞變數集,並且函式的程式碼會在文字(或程式碼)段的不同儲存單元內。由於在呼叫函式時,程式的執行環境和EIP必須改變,因而用堆疊儲存所有被傳遞的變數,以及函式執行後EIP應該返回的地方。
相關文章
- Oracle9i自動分段空間管理改善分段儲存Oracle
- Oracle9i的自動分段空間管理改善了分段儲存的本質Oracle
- 儲存器
- 儲存器的知識
- 外部儲存器
- 傳統儲存器和新興儲存器應用
- 嵌入式中常見的儲存器總結(一)儲存器分類
- Flash儲存器的故障特徵特徵
- 瀏覽器儲存的方法瀏覽器
- cuda優化之常量儲存器和紋理儲存器優化
- 儲存器的層次結構
- 伺服器資料的儲存伺服器
- mysql儲存函過程和儲存函式都屬於儲存程式MySql儲存函式
- 如何延長儲存伺服器上資料的儲存時間?伺服器
- 高速率儲存器UFS
- 瀏覽器本地儲存瀏覽器
- 共享儲存器優化優化
- CUDA儲存器組織
- 只讀儲存器ROM
- 儲存ASPX 生成的html程式碼HTML
- 數值資訊的機器級儲存
- 加大對儲存器國產化的投入
- 儲存器的分類及其特點
- 【GMT43智慧液晶模組】例程十:DMA實驗——儲存器到儲存器的傳輸
- 【iCore3 雙核心板】例程十一:DMA實驗——儲存器到儲存器的傳輸
- 微信小程式storage儲存微信小程式
- 臨時儲存程式碼
- SRAM是什麼儲存器
- 常見儲存器分類
- [嵌入式]儲存器管理
- FastDFS儲存伺服器部署AST伺服器
- 【CUDA學習】共享儲存器
- 全域性儲存器優化優化
- HDU-安卓程式開發之簡單儲存/內部儲存/外部儲存 & 捉蟲安卓
- 【iCore4 雙核心板_ARM】例程十一:DMA實驗——儲存器到儲存器的傳輸
- 塊儲存 檔案儲存 物件儲存物件
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- 鐵電儲存器FRAM的優劣勢