虛擬內存

一, 內存結構描述

1. 查看進程

  • getpid() 這個函數是Linux系統(tǒng)庫函數, 在使用時需要導入頭文件 #include <unistd.h> , 這個函數用來獲取當前進程的進程id號, 或者通過 ps aue 也可以查看當前系統(tǒng)下運行的所有進程, 然后找到當前程序的進程號.
  • /proc/${pid}/ 這個文件夾的生命周期是程序運行過程中, 程序結束時文件夾銷毀. 該文件夾下存放對當前程序運行過程中內存分配的描述文件.
內存分配結構

2. 內存分配

  • 所有程序的起始地址都是0x08048000, 內存分配依次是 代碼區(qū), 全局區(qū), 堆區(qū), 棧區(qū)
  • 關于堆區(qū)內存分配方式: malloc, new, sbrk, brk
  • malloc 與 new
    malloc 使用一個鏈表的數據結構維護和分配空間.對malloc分配的空間不要越界訪問.因為容易破壞后臺維護結構.導致malloc/free/calloc/realloc不正常工作.
    {
    分配的空間;
    上一個空間的信息;
    下一個空間的信息;
    當前空間大小等信息;
    }

3.new 與 malloc

  • new 是通過malloc 實現的. new在申請到空間后, 還會執(zhí)行空間的初始化. 對于基本類型數據, 直接初始化為默認值. 對于用戶自定義類型, 需要調用指定的構造器. 同樣地, 在釋放空間時, delete 是通過調用free 實現, delete 是先調用析構器, 再調用free釋放空間.
  • new 只調用一次構造器. 而 new [ ] 會循環(huán)對每個區(qū)域調用構造器.
  • Stu *p = new Stu[30]; 對于自定義類型 p 的釋放. delete 和 delete [ ]; 都能釋放掉這塊空間. delete 只會調一次析構, 而 delete[ ] 會對p 所指向的30 個對象空間依次調用析構.

4.函數調用棧空間的分配與釋放

  • 函數執(zhí)行的時候有自己的臨時楒暄剩空間, 函數的參數就在臨時棧中.

二, 虛擬內存

每個應用程序在啟動時, 并沒有直接訪問內存的物理地址. 而是通過虛擬內存映射的方式向物理內存申請存儲空間. 對于Linux 系統(tǒng)而言, 每個程序的起始的虛擬地址都是 0x80084000.

1. 虛擬內存映射

應用程序在運行的過程中所使用的地址并不是物理地址, 而是邏輯地址(虛擬內存). 對于邏輯地址, 不過是一個整形數據而已. 如果對int型分配的是4個字節(jié). 那么32位的尋址方位剛好是4G, 十六進制表示0x1000. 我們將這個數值成為一個頁.

2. 虛擬內存分配

虛擬內存映射

從上面的內存分配結構圖中, 我們可以看到, 系統(tǒng)分配內存都是 1 個頁 或 1個頁的整數倍. 每個程序在運行的時候, 都會在物理內存上有自己的映射. 一旦訪問沒有映射的物理內存區(qū)域, 程序就會出現崩潰.

3. brk 和sbrk

void* sbrk(int size)

sbrk 可以用來分配空間, sbrk(0) 第一次運行時, 我們通常用來獲取沒有映射的空閑空間的首地址. 與malloc 不同, malloc維護的是一個結構體, 而sbrk維護的是一個整形的指針.

int brk(void* end)

brk用來分配空間和釋放空間.

sbrk 操作的是絕對位置, brk操作的是相對位置.
sbrk 常用來獲取地址, brk常用來分配空間. 兩者搭配使用.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末定踱,一起剝皮案震驚了整個濱河市忙厌,隨后出現的幾起案子筋岛,更是在濱河造成了極大的恐慌茫孔,老刑警劉巖淹冰,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库车,死亡現場離奇詭異,居然都是意外死亡樱拴,警方通過查閱死者的電腦和手機柠衍,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晶乔,“玉大人珍坊,你說我怎么就攤上這事≌眨” “怎么了垫蛆?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我袱饭,道長川无,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任虑乖,我火速辦了婚禮懦趋,結果婚禮上,老公的妹妹穿的比我還像新娘疹味。我一直安慰自己仅叫,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布糙捺。 她就那樣靜靜地躺著诫咱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洪灯。 梳的紋絲不亂的頭發(fā)上坎缭,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音签钩,去河邊找鬼掏呼。 笑死,一個胖子當著我的面吹牛铅檩,可吹牛的內容都是我干的憎夷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼昧旨,長吁一口氣:“原來是場噩夢啊……” “哼拾给!你這毒婦竟也來了?” 一聲冷哼從身側響起兔沃,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鸣戴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粘拾,有當地人在樹林里發(fā)現了一具尸體窄锅,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年缰雇,在試婚紗的時候發(fā)現自己被綠了入偷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡械哟,死狀恐怖疏之,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情暇咆,我是刑警寧澤锋爪,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布丙曙,位于F島的核電站,受9級特大地震影響其骄,放射性物質發(fā)生泄漏亏镰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一拯爽、第九天 我趴在偏房一處隱蔽的房頂上張望索抓。 院中可真熱鬧,春花似錦毯炮、人聲如沸逼肯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮幢。三九已至,卻和暖如春为迈,著一層夾襖步出監(jiān)牢的瞬間三椿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工曲尸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赋续,地道東北人男翰。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓另患,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛾绎。 傳聞我的和親對象是個殘疾皇子昆箕,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容