程式在記憶體空間中的布局

2021-07-30 06:14:50 字數 778 閱讀 7707

下面1.**段(text):也叫正文段,cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常環境指標環境表環境字串執行的程式(如文字編輯程式、c編譯程式、shell等)在儲存器中也只需有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改其自身的指令。

2.初始化過的資料段(data):通常將此段稱為資料段,它包含了程式中需賦初值的變數。初始化的全域性變數和靜態變數存放在這裡。

3.未初始化過的資料段(bss):未初始化的全域性變數和靜態變數存放在這裡。在程式開始執行之前,核心將此段初始化為0。

4.堆空間(heap):用於動態分配的記憶體, 需要手動管理記憶體,執行流執行到手動分配記憶體函式呼叫(如 malloc 或 new)時, 分配記憶體,從低位址向高位址增長。但是頻繁的開闢空間會造成記憶體碎片化,降低程式效率。

5.棧空間(stack):儲存自動變數, 函式呼叫者資訊, 包括函式引數(可變引數列表的壓棧方向是從右向左), 函式內區域性變數, 函式返回值, 函式呼叫時的返回位址。執行流執行到函式呼叫時分配記憶體, 高位址是棧底,向低位址方向增長,函式返回時, 系統自動**記憶體。

6.命令列引數和環境變數(argument and environment):使程式了解程序環境,在執行時分配記憶體。

程序的記憶體空間布局

程序的記憶體布局在結構上是有規律的,對於 linux 系統上的程序,其記憶體空間一般可以粗略地分為以下幾大段,從高記憶體到低記憶體排列 1 核心態記憶體空間,其大小一般比較固定 可以編譯時調整 但 32 位系統和 64 位系統的值不一樣。2 使用者態的棧,大小不固定,可以用ulimit s 進行調整...

程式記憶體空間的分配

關於程式記憶體空間的分配 mcu的memory中分為不同的area,比如說rl78 g14的memory map如下圖 其中不同的memory area有不同的用途。按照從下向上的順序 1 code flash memory 這個顧名思義就是目標程式所佔據的位置。這裡應該更確切的說一下,程式中涉及到...

程式在記憶體中的布局

c語言程式在記憶體中的分布 段 text 存放著程式的機器碼和唯讀資料 常量 全域性區 靜態區 由編譯器編譯時分配,程式執行結束後釋放 屬於靜態記憶體分配 在程式的二進位制檔案中,bss段不佔儲存空間,只有在載入到記憶體中才分配 data段 存放已初始化的靜態變數 static 修飾 和全域性變數 ...