国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux內存管理進程所涉及到的五個數據段

2024-06-28 13:02:43
字體:
來源:轉載
供稿:網友
 

進程(執行的程序)會占用一定數量的內存,它或是用來存放從磁盤載入的程序代碼,或是存放取自用戶輸入的數據等等。不過進程對這些內存的管理方式因內存用途不一而不盡相同,有些內存是事先靜態分配和統一回收的,而有些卻是按需要動態分配和回收的。對任何一個普通進程來講,它都會涉及到5種不同的數據段。

linux進程的五個段

下面我們來簡單歸納一下進程對應的內存空間中所包含的5種不同的數據區都是干什么的。

1)代碼段:代碼段是用來存放可執行文件的操作指令,也就是說是它是可執行程序在內存中的鏡像。代碼段需要防止在運行時被非法修改,所以只準許讀取操作,而不允許寫入(修改)操作——它是不可寫的。

2)數據段:數據段用來存放可執行文件中已初始化全局變量,換句話說就是存放程序靜態分配的變量和全局變量。

3)BSS段:BSS段包含了程序中未初始化的全局變量,在內存中 bss段全部置零。

4)堆(heap):堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

它的物理內存空間是由程序申請的,并由程序負責釋放。

5)棧:棧是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味著在數據段中存放變量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,并且待到調用結束后,函數的返回值也會被存放回棧中。由于棧的先進先出特點,所以棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。

它是由操作系統分配的,內存的申請與回收都由OS管理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河间市| 儋州市| 县级市| 丰顺县| 建水县| 金昌市| 乌什县| 汨罗市| 左云县| 汉沽区| 天等县| 乌鲁木齐市| 黑龙江省| 习水县| 交城县| 高淳县| 沂南县| 徐闻县| 凭祥市| 临泉县| 大同县| 金乡县| 胶南市| 镇沅| 福建省| 杭锦后旗| 紫云| 瑞安市| 平远县| 博白县| 兰州市| 页游| 桃园市| 临汾市| 绵竹市| 惠东县| 同心县| 彰化市| 平泉县| 信丰县| 宁波市|