C 程式的記憶體佈局如下所示。等級很少。它們是-
現在讓我們看看這些部分的功能是什麼。
Sr.No | 部分和說明 |
---|---|
1 |
堆疊 進程堆疊包含方法/函數參數、返回位址和局部變數等臨時資料。它是分配給自動變數和函數參數的記憶體區域。它還在執行函數呼叫時儲存返回地址。堆疊採用LIFO(後進先出)機制來儲存局部或自動變數、函數參數以及儲存下一個位址或回傳位址。返回地址是指函數執行完成後要回傳的地址。此段大小會根據局部變數、函數參數和函數呼叫而變化。該段從較高地址增長到較低地址。 |
2 |
堆 這是在進程運行時動態分配的記憶體。這是分配給動態記憶體儲存(例如 malloc() 和 calloc() 呼叫)的記憶體區域。該段大小也根據用戶分配而變化。該段從較低地址增長到較高地址。 現在讓我們檢查幾個範例程式的段(資料和 bss 段)大小如何變化。執行指令「size」即可獲知段大小。 |
3 |
文字 這包括程式計數器的值和處理器暫存器的內容表示的當前活動。它由 .text 部分錶示。這定義了記憶體中儲存指令代碼的區域。這也是一個固定區域。 |
4 |
資料 #本節包含全域變數和靜態變數。它由.data 部分和.bss 表示。 .data 部分用於聲明記憶體區域,其中為程式儲存資料元素。聲明資料元素後,此部分無法擴展,並且在整個程式中保持靜態。 .bss 部分也是靜態記憶體部分,其中包含稍後在程式中聲明的資料的緩衝區。此緩衝區記憶體是零填充的。 |
資料段可以分成更多的兩部分。
這是目標檔案或程式虛擬位址空間的一部分,由未初始化的靜態變數和全域變數組成。未初始化的資料段也稱為BSS(Block Started by Symbol)段。
這是可讀寫的,因為變數的值可以在運行時更改。該段也有固定的大小。
以上是C程式的記憶體佈局的詳細內容。更多資訊請關注PHP中文網其他相關文章!