1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      Linux內(nèi)存管理進(jìn)程所涉及到的五個數(shù)據(jù)段

      更新時間: 2008-04-17 14:06:07來源: 粵嵌教育瀏覽量:751

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

        Linux進(jìn)程的五個段

         下面我們來簡單歸納一下進(jìn)程對應(yīng)的內(nèi)存空間中所包含的5種不同的數(shù)據(jù)區(qū)都是干什么的。

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

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

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

        4)堆(heap):堆是用于存放進(jìn)程運(yùn)行中被動態(tài)分配的內(nèi)存段,它的大小并不固定,可動態(tài)擴(kuò)張或縮減。當(dāng)進(jìn)程調(diào)用malloc等函數(shù)分配內(nèi)存時,新分配的內(nèi)存就被動態(tài)添加到堆上(堆被擴(kuò)張);當(dāng)利用free等函數(shù)釋放內(nèi)存時,被釋放的內(nèi)存從堆中被剔除(堆被縮減)

        它的物理內(nèi)存空間是由程序申請的,并由程序負(fù)責(zé)釋放。

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

        它是由操作系統(tǒng)分配的,內(nèi)存的申請與回收都由OS管理。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲v天堂v日本v | 亚洲精品国产五月综合网 | 三级网站免在线看 | 亚洲日本欧美日韩髙清观看 | 久久这里只精品99re66免费 | 婷婷丁香中文在线综合一区 |