国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux 是如何進(jìn)行內(nèi)存分配的

系統(tǒng) Linux
在 Linux 操作系統(tǒng)中,虛擬地址空間的內(nèi)部又被分為內(nèi)核空間和用戶空間兩部分,不同位數(shù)的系統(tǒng),地址空間的范圍也不同。比如最常見(jiàn)的 32 位和 64 位系統(tǒng)。

虛擬內(nèi)存管理回顧

在 Linux 操作系統(tǒng)中,虛擬地址空間的內(nèi)部又被分為內(nèi)核空間和用戶空間兩部分,不同位數(shù)的系統(tǒng),地址空間的范圍也不同。比如最常見(jiàn)的 32 位和 64 位系統(tǒng),如下所示

通過(guò)這里可以看出:

  • 32 位系統(tǒng)的內(nèi)核空間占用 1G,位于最高處,剩下的 3G 是用戶空間;
  • 64 位系統(tǒng)的內(nèi)核空間和用戶空間都是 128T,分別占據(jù)整個(gè)內(nèi)存空間的最高和最低處,剩下的中間部分是未定義的。

再來(lái)說(shuō)說(shuō),內(nèi)核空間與用戶空間的區(qū)別:

  • 進(jìn)程在用戶態(tài)時(shí),只能訪問(wèn)用戶空間內(nèi)存;
  • 只有進(jìn)入內(nèi)核態(tài)后,才可以訪問(wèn)內(nèi)核空間的內(nèi)存;

雖然每個(gè)進(jìn)程都各自有獨(dú)立的虛擬內(nèi)存,但是每個(gè)虛擬內(nèi)存中的內(nèi)核地址,其實(shí)關(guān)聯(lián)的都是相同的物理內(nèi)存。這樣,進(jìn)程切換到內(nèi)核態(tài)后,就可以很方便地訪問(wèn)內(nèi)核空間內(nèi)存。

我們看看用戶空間分布的情況,以 32 位系統(tǒng):

通過(guò)這張圖你可以看到,用戶空間內(nèi)存,從低到高分別是 6 種不同的內(nèi)存段:

  • 0x0000 0000 到 0x0804 8000 這段虛擬內(nèi)存地址是一段不可訪問(wèn)的保留區(qū),因?yàn)樵诖蠖鄶?shù)操作系統(tǒng)中,數(shù)值比較小的地址通常被認(rèn)為不是一個(gè)合法的地址,這塊小地址是不允許訪問(wèn)的。比如在 C 語(yǔ)言中我們通常會(huì)將一些無(wú)效的指針設(shè)置為 NULL,指向這塊不允許訪問(wèn)的地址。
  • 代碼段,包括二進(jìn)制可執(zhí)行代碼;
  • 數(shù)據(jù)段,包括已初始化的靜態(tài)常量和全局變量;
  • BSS 段,包括未初始化的靜態(tài)變量和全局變量;
  • 堆段,包括動(dòng)態(tài)分配的內(nèi)存,從低地址開(kāi)始向上增長(zhǎng);
  • 堆空間的上邊是一段待分配區(qū)域,用于擴(kuò)展堆空間的使用
  • 文件映射段,包括動(dòng)態(tài)庫(kù)、共享內(nèi)存等,從低地址開(kāi)始向上增長(zhǎng)
  • 棧段,包括局部變量和函數(shù)調(diào)用的上下文等。棧的大小是固定的,一般是 8 MB。當(dāng)然系統(tǒng)也提供了參數(shù),以便我們自定義大小;

申請(qǐng)內(nèi)存的兩種方式

申請(qǐng)內(nèi)存空間一般就兩種方法,一種是malloc,另一種是 mmap映射空間。 在使用malloc()分配內(nèi)存的時(shí)候,可能系統(tǒng)調(diào)用brk(),也可能調(diào)用mmap()。

malloc的調(diào)用規(guī)律

1. 即分配一塊小型內(nèi)存(小于或等于128kb),malloc()會(huì)調(diào)用brk 函數(shù)將 堆頂 指針向高地址移動(dòng),獲得新的內(nèi)存空間。

2. 當(dāng)分配一塊大型內(nèi)存(大于128kb),mmap() 系統(tǒng)調(diào)用中「私有匿名映射」的方式,在文件映射區(qū)分配一塊內(nèi)存

申請(qǐng)內(nèi)存過(guò)程圖

要注意的是,malloc() 分配的是虛擬內(nèi)存。

如果分配后的虛擬內(nèi)存沒(méi)有被訪問(wèn)的話,虛擬內(nèi)存是不會(huì)映射到物理內(nèi)存的,這樣就不會(huì)占用物理內(nèi)存了。

只有在訪問(wèn)已分配的虛擬地址空間的時(shí)候,操作系統(tǒng)通過(guò)查找頁(yè)表,發(fā)現(xiàn)虛擬內(nèi)存對(duì)應(yīng)的頁(yè)沒(méi)有在物理內(nèi)存中,就會(huì)觸發(fā)缺頁(yè)中斷,然后操作系統(tǒng)會(huì)建立虛擬內(nèi)存和物理內(nèi)存之間的映射關(guān)系。

缺頁(yè)中斷就是要訪問(wèn)的頁(yè)不在主存,需要操作系統(tǒng)將其調(diào)入主存后再進(jìn)行訪問(wèn)。在這個(gè)時(shí)候,被內(nèi)存映射的文件實(shí)際上成了一個(gè)分頁(yè)交換文件。

malloc 申請(qǐng)的內(nèi)存,free 釋放內(nèi)存會(huì)歸還給操作系統(tǒng)嗎

  • malloc 通過(guò) brk() 方式申請(qǐng)的內(nèi)存,free 釋放內(nèi)存的時(shí)候,并不會(huì)把內(nèi)存歸還給操作系統(tǒng),而是緩存在 malloc 的內(nèi)存池中,待下次使用;
  • malloc 通過(guò) mmap() 方式申請(qǐng)的內(nèi)存,free 釋放內(nèi)存的時(shí)候,會(huì)把內(nèi)存歸還給操作系統(tǒng),內(nèi)存得到真正的釋放。

mmap 和 brk 分配內(nèi)存的區(qū)別

mmap 來(lái)分配內(nèi)存的問(wèn)題

mmap 分配的內(nèi)存每次釋放的時(shí)候,都會(huì)歸還給操作系統(tǒng),于是每次 mmap 分配的虛擬地址都是缺頁(yè)狀態(tài)的,然后在第一次訪問(wèn)該虛擬地址的時(shí)候,就會(huì)觸發(fā)缺頁(yè)中斷。

也就是說(shuō),頻繁通過(guò) mmap 分配的內(nèi)存話,不僅每次都會(huì)發(fā)生運(yùn)行態(tài)的切換,還會(huì)發(fā)生缺頁(yè)中斷(在第一次訪問(wèn)虛擬地址后),這樣會(huì)導(dǎo)致 CPU 消耗較大。

為了改進(jìn)這兩個(gè)問(wèn)題,malloc 通過(guò) brk() 系統(tǒng)調(diào)用在堆空間申請(qǐng)內(nèi)存的時(shí)候,由于堆空間是連續(xù)的,所以直接預(yù)分配更大的內(nèi)存來(lái)作為內(nèi)存池,當(dāng)內(nèi)存釋放的時(shí)候,就緩存在內(nèi)存池中。

等下次在申請(qǐng)內(nèi)存的時(shí)候,就直接從內(nèi)存池取出對(duì)應(yīng)的內(nèi)存塊就行了,而且可能這個(gè)內(nèi)存塊的虛擬地址與物理地址的映射關(guān)系還存在,這樣不僅減少了系統(tǒng)調(diào)用的次數(shù),也減少了缺頁(yè)中斷的次數(shù),這將大大降低 CPU 的消耗。

只使用 brk 來(lái)分配內(nèi)存的問(wèn)題

前面我們提到通過(guò) brk 從堆空間分配的內(nèi)存,并不會(huì)歸還給操作系統(tǒng),那么我們那考慮這樣一個(gè)場(chǎng)景。

如果我們連續(xù)申請(qǐng)了 10k,20k,30k 這三片內(nèi)存,如果 10k 和 20k 這兩片釋放了,變?yōu)榱丝臻e內(nèi)存空間,如果下次申請(qǐng)的內(nèi)存小于 30k,那么就可以重用這個(gè)空閑內(nèi)存空間。

但是如果下次申請(qǐng)的內(nèi)存大于 30k,沒(méi)有可用的空閑內(nèi)存空間,必須向 OS 申請(qǐng),實(shí)際使用內(nèi)存繼續(xù)增大。

因此,隨著系統(tǒng)頻繁地 malloc 和 free ,尤其對(duì)于小塊內(nèi)存,堆內(nèi)將產(chǎn)生越來(lái)越多不可用的碎片,導(dǎo)致“內(nèi)存泄露”。而這種“泄露”現(xiàn)象使用 valgrind 是無(wú)法檢測(cè)出來(lái)的。

所以,malloc 實(shí)現(xiàn)中,充分考慮了 brk 和 mmap 行為上的差異及優(yōu)缺點(diǎn),默認(rèn)分配大塊內(nèi)存 (128KB) 才使用 mmap 分配內(nèi)存空間。


責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2020-10-26 08:24:09

內(nèi)網(wǎng)信息收集滲透測(cè)試

2020-10-28 07:09:13

內(nèi)網(wǎng)信息收集

2010-03-17 17:19:29

Python數(shù)據(jù)結(jié)構(gòu)

2013-04-15 17:55:12

Windows認(rèn)證安全認(rèn)證

2013-04-16 10:33:58

Windows 安全認(rèn)微軟

2010-07-21 14:17:07

Linux telne

2024-05-08 08:16:11

2020-08-06 00:14:16

Spring IoC依賴注入開(kāi)發(fā)

2019-02-28 14:04:28

內(nèi)存固定分配存儲(chǔ)

2011-08-22 12:05:50

Linux

2011-09-15 11:31:21

linux軟件倉(cāng)庫(kù)

2020-07-28 08:10:33

Linux內(nèi)存虛擬

2011-08-16 17:19:59

linux加密分區(qū)

2014-09-19 10:46:36

LuaCC++

2024-12-27 09:21:58

2020-02-12 08:50:05

Linux命令啟動(dòng)時(shí)間

2021-03-15 10:23:44

IT支出技術(shù)投資CIO

2021-08-30 06:59:07

x86處理器內(nèi)存

2024-05-13 11:12:08

FO-DICOM開(kāi)源應(yīng)用開(kāi)發(fā)

2020-04-06 14:50:43

MySQLSQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美精品免费看| 激情五月俺来也| 日韩三级毛片| 亚洲另类激情图| 免费高清在线观看| 亚洲成人av在线电影| 在线观看高清免费视频| 不卡的电视剧免费网站有什么| 色999五月色| 国产精品v日韩精品v欧美精品网站 | 亚洲一区二区久久久| 国产美女在线观看| 欧美午夜视频网站| 日韩a在线看| 色欲综合视频天天天| 在线观看国产视频| 天天色天天操综合| 一本到av在线| 亚洲高清视频在线| ga∨成人网| 亚洲靠逼com| 91大神影片| 亚洲四区在线观看| 日本调教视频在线观看| 亚洲柠檬福利资源导航| 午夜免费啪视频观看视频| 亚洲一级不卡视频| 久热av在线| 精品视频资源站| www.久久ai| 日韩成人黄色av| 欧美大片免费| 欧美风情在线观看| 夜夜春成人影院| 国产精品日日摸夜夜添夜夜av| 色狮一区二区三区四区视频| 91亚洲精品在线| 亚洲看片一区| 亚洲av首页在线| 久久久九九九九| 女人体1963| 欧美在线一区二区| 超碰91在线观看| 欧美成人四级hd版| 久久人体视频| 色999五月色| 久久综合久久鬼色中文字| 黄网站免费入口| 欧美吞精做爰啪啪高潮| 高清精品在线| 欧美成人午夜激情| 日韩欧美视频专区| 日韩国产精品一区二区三区| 99久久精品国产一区二区三区| av免费播放| 91精品国产91热久久久做人人| 欧美人与性动交xxⅹxx| 国产91九色视频| 久热精品视频| 日韩中文字幕免费在线| 偷拍一区二区三区四区| 日本小视频在线免费观看| 欧美成人合集magnet| 亚洲女同中文字幕| 伊人久久在线观看| 亚洲一区二区视频在线观看| 国产深夜视频在线观看| 68精品久久久久久欧美| 久久精品动漫| 不卡av免费在线| 5858s免费视频成人| 成人爽a毛片免费啪啪红桃视频| 国产一级精品aaaaa看| eeuss影院一区二区三区| 在线观看av片| 综合国产在线视频| 午夜国产精品视频免费体验区| 日韩精品视频在线观看视频| 欧美日韩一区二区免费在线观看| 成人mm视频在线观看| 国产日韩亚洲精品| 国产精品人人做人人爽人人添| 亚洲七七久久综合桃花剧情介绍| 51ⅴ精品国产91久久久久久| 美腿丝袜一区二区三区| 黄动漫在线看| 超碰精品一区二区三区乱码| 在线综合视频| 中文字幕第5页| 亚洲色图综合网| 国产欧美高清| 黄动漫在线看| 欧美猛交免费看| 久久国产日韩欧美精品| 最猛黑人系列在线播放| www.日本久久久久com.| 久久久久久久欧美精品| av福利导福航大全在线播放| 中文字幕亚洲一区二区三区五十路 | 亚洲精品视频在线观看网站| 91精选在线| 国产精品视频久久久久| 久久蜜桃av一区二区天堂| 国产91足控脚交在线观看| 亚洲在线免费看| www.av毛片| 国产精品国产三级在线观看| 久草福利在线| 日韩国产欧美亚洲| 国产成人精品视频在线| 亚洲综合偷拍欧美一区色| 国产成人亚洲综合a∨猫咪| 97久久综合精品久久久综合| 黄色免费在线网站| 免费高清在线观看免费| 久久影视电视剧免费网站| 亚洲成年人影院在线| 天堂一区二区在线| 欧美综合精品| 污片视频在线免费观看| 亚洲优女在线| 国产综合免费视频| 亚洲欧美视频二区| 亚洲中文字幕无码av永久| 免费在线观看91| 伊人久久大香线蕉av一区| 视色,视色影院,视色影库,视色网| 精品国产免费一区二区三区| 色老头一区二区三区| 国产成人午夜精品影院观看视频| 136国产福利精品导航网址| 人狥杂交一区欧美二区| 成全电影播放在线观看国语| 成人精品福利视频| 国内精品久久久| 色多多国产成人永久免费网站| 米奇精品一区二区三区在线观看| 欧美三级在线播放| 伊人久久大香线蕉综合影院首页| 国产精品白丝av嫩草影院| 伊人成综合网| 在线黄色的网站| 九色在线网站| 瑟瑟在线观看| 日韩精品系列| 国产不卡在线| 亚洲不卡系列| 欧洲亚洲一区二区三区| 在线观看免费视频你懂的| 淫视频在线观看| 九色porny蝌蚪视频在线观看| 日韩av在线播放不卡| 69sex久久精品国产麻豆| 日韩一区国产在线观看| 成人黄色在线播放| 99re在线观看| 国产免费一区二区三区四在线播放| 国产xxxx振车| 一区二区三区国产免费| 男女人搞j网站| 色综合久久网女同蕾丝边| 第一页在线观看| 粉嫩av国产一区二区三区| 香蕉久久99| 国产老女人精品毛片久久| 中文字幕制服丝袜成人av | 亚洲最大在线视频| 北岛玲一区二区三区四区 | 麻豆成人免费电影| aa国产精品| 99视频精品免费视频| 91免费观看国产| 婷婷国产在线综合| 中文字幕亚洲专区| 国产精品久久久久久久久借妻| 亚洲欧美日韩国产成人综合一二三区 | 欧美精品99久久| 免费成人在线视频网站| 激情四房婷婷| 成人亚洲成人影院| 亚洲不卡中文字幕无码| 午夜老司机在线观看| 日日av拍夜夜添久久免费| 久久电影网站| 9l视频自拍蝌蚪9l视频成人| 日韩中文欧美在线| 午夜精品123| 亚洲日本成人在线观看| 精品国产露脸精彩对白| 国产精品香蕉av| 永久免费网站视频在线观看| 黄色网页网址在线免费| 8x8x华人在线| 国产高清在线不卡| 精品盗摄一区二区三区| 亚洲欧美自拍偷拍| 激情综合色丁香一区二区| 天天揉久久久久亚洲精品| 亚洲福利影视| 免费av不卡在线观看|