在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內存分段是如何產生內存碎片的

麥辣雞腿堡 ? 來源:程序猿阿星 ? 作者:程序猿阿星 ? 2023-10-09 16:28 ? 次閱讀

內存分段

程序包含若干個邏輯分段,如可由代碼段、數據段、棧段、堆段組成,每個分段都有不同的屬性,所以內存以分段的形式把這些段分離出來進行管理

在內存分段方式下,虛擬地址和物理地址是如何映射的?

分段管理下的虛擬地址由兩部分組成,段號和段內偏移量

圖片

通過段號映射段表的項

從項中獲取到段基地址

段基地址+段內偏移量=使用的物理內存

通過上述知道了,使用段號去映射段表的項,使用項中的段基地址與偏移量計算出物理內存地址,但實際上,分段方式會把程序的虛擬地址分為4段,每個段在段表中有一個項,在這一項找到段的基地址,再加上偏移量計算出物理內存地址

分段的方式,很好的解決了,程序本身不需要關心具體物理內存地址的問題,但是它仍有不足之處:

內存碎片的問題

內存交換的效率低的問題

接下來對這兩個問題進行分析

分段方式是如何產生內存碎片的?

在說內存碎片之前,還是先弄明白,什么是內存碎片?,8個人去外面吃飯,因為飯點原因,人比較多,剩下的都是4人小餐桌,這些4人小餐桌就是我們所說的內存碎片,此時會有小伙伴說,把2個4人小餐桌拼湊在一起就解決了這個問題,非常簡單,我們把這種方式稱為內存碎片整理(涉及到內存交換)。

回到正題,我們來看一例子,假設物理內存只有1GB (1024MB),用戶電腦上運行了多個程序:

瀏覽器占用128MB

音樂軟件占用256MB

游戲占用了512MB

這個時候我們關閉瀏覽器,剩余物理內存1024MB -(256MB+512MB)=256MB。但是這剩余的256MB物理內存不是連續的,被分為了兩段128MB,導致沒有空間再打開一個200MB的程序,如下圖所示

圖片

這里的內存碎片問題共有兩點:

外部內存碎片,就是多個不連續的小物理內存空間,導致新的程序無法被裝載

內部內存碎片,程序所有的內存都被裝載進了物理內存,但是程序有部分的內存,可能不經常使用,造成內存的浪費

解決外部內存碎片的方法就是使用內存碎片整理

內存碎片整理通過內存交換的方式來實現,我們可以把音樂軟件占用的256MB加載到硬盤上面去,再從硬盤讀取回來,但是讀取回來的位置不再是原來的位置,而是緊跟已經占用的游戲512MB后面,這樣兩個128MB的空閑物理內存就合并成了一個256MB的連續物理內存,于是新的200MB新程序就能被裝載進來

內存交換空間,在 Linux 系統里,是我們常看到的 Swap 空間,這塊空間是從硬盤劃分出來的,用于內存與硬盤的空間交換。

分段方式為什么內存交換效率低?首先分段管理容易造成內存碎片,導致內存交換的頻率較高,因為硬盤的訪問速度比內存慢太多了,然后每次交換的時候,把一大段連續的內存寫入到硬盤,再又從硬盤讀取出來,如果交換的是一個占內存空間很大的程序,這樣整個機器都會顯得卡頓,過程也很慢的,所以說分段方式內存交換效率低。

為了解決內存分段管理造成的內存碎片與內存交換效率低的問題,就出現了內存分頁。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 硬盤
    +關注

    關注

    3

    文章

    1317

    瀏覽量

    57493
  • 內存
    +關注

    關注

    8

    文章

    3055

    瀏覽量

    74331
  • 操作系統
    +關注

    關注

    37

    文章

    6896

    瀏覽量

    123748
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81415
收藏 人收藏

    評論

    相關推薦

    linux內存相關知識科普

    linux 內存組織結構和頁面布局,內存碎片產生原因和優化算法。
    發表于 08-08 10:57 ?406次閱讀

    走進Linux內存系統探尋內存管理的機制和奧秘

    Linux 內存是后臺開發人員,需要深入了解的計算機資源。合理的使用內存,有助于提升機器的性能和穩定性。本文主要介紹Linux 內存組織結構和頁面布局,內存
    的頭像 發表于 01-05 09:47 ?1691次閱讀

    C語言malloc申請內存時的碎片問題

    解決問題:malloc在申請內存的時候,內存碎片問題會導致原本內存大小足夠,卻申請大內存失敗。
    發表于 08-06 16:58 ?1689次閱讀
    C語言malloc申請<b class='flag-5'>內存</b>時的<b class='flag-5'>碎片</b>問題

    嵌入式系統中內存碎片產生過程說明

    在嵌入式系統中,內存是十分有限而且是十分珍貴的,用一塊內存就少了一塊內存,而在分配中隨著內存不斷被分配和釋放,整個系統內存區域會
    發表于 09-21 12:22 ?724次閱讀
    嵌入式系統中<b class='flag-5'>內存</b><b class='flag-5'>碎片</b><b class='flag-5'>產生</b>過程說明

    Linux內核內存規整總結

    1.前言 伙伴系統作為內核最基礎的物理頁內存分配器,具有高效、實現邏輯簡介等優點,其原理頁也盡可能降低內存外部碎片產生,但依然無法杜絕碎片
    的頭像 發表于 11-11 11:17 ?1389次閱讀
    Linux內核<b class='flag-5'>內存</b>規整總結

    請問mymalloc會產生內存碎片嗎?

    malloc申請內存在釋放后,會產生內存碎片,所以UCOSIII內有專門的內存申請。原子哥視頻(UCOSIII視頻19講)最后的時候說可以用
    發表于 10-16 04:35

    如何避免內存碎片產生

    內存碎片產生(從內部碎片和外部碎片方面講述)編程題:第一題:解析頭文件,簡單來說就是大寫字母小寫之母通過一些特定的規則進行轉換,具體題目要
    發表于 12-21 07:50

    基于線段樹的內存管理方法

    現有的內存管理的工作多集中在內存分配的效率上,實時性較好,但易產生內存碎片。為此,提出基于線段樹的高效
    發表于 12-27 14:06 ?2次下載
    基于線段樹的<b class='flag-5'>內存</b>管理方法

    如何避免Linux的物理內存碎片

    Linux buddyy系統是linux kernel比較穩定的一個模塊,但是并不是說它沒有缺陷,Linux內存管理系統自誕生之日,就一直存在物理內存碎片化的問題:在系統啟動并且運行很長一段時間后
    的頭像 發表于 05-01 16:43 ?5505次閱讀
    如何避免Linux的物理<b class='flag-5'>內存</b><b class='flag-5'>碎片</b>化

    你知道linux kernel內存碎片防治技術?

    Linux kernel組織管理物理內存的方式是buddy system(伙伴系統),而物理內存碎片正式buddy system的弱點之一,為了預防以及解決碎片問題,kernel采取了
    發表于 05-10 10:59 ?977次閱讀

    OPPO內存碎片化引擎的作業

    OPPO宣傳的內存碎片化引擎是個什么東西?它有何作用?針對上述問題,ColorOS官方微博特地發文科普,我們一起來看看。
    的頭像 發表于 03-15 16:20 ?3616次閱讀

    FreeRTOS內存碎片是怎么來的

    內存碎片 在看 FreeRTOS的內存分配方法之前我們先來看一下什么叫做內存碎片,看名字就知道是小塊的、
    的頭像 發表于 07-30 10:29 ?948次閱讀
    FreeRTOS<b class='flag-5'>內存</b><b class='flag-5'>碎片</b>是怎么來的

    什么是內存碎片Linux

    什么是內存碎片內存碎片在Linux很早的時候就已經出現了,了解早期內存碎片
    的頭像 發表于 10-08 10:12 ?771次閱讀
    什么是<b class='flag-5'>內存</b><b class='flag-5'>碎片</b>Linux

    如何解決內存碎片內存交換效率慢的問題

    內存分頁 分段的好處是能產生連續的內存空間,但是會出現大量內存碎片
    的頭像 發表于 10-09 16:57 ?1090次閱讀
    如何解決<b class='flag-5'>內存</b><b class='flag-5'>碎片</b>與<b class='flag-5'>內存</b>交換效率慢的問題

    內存池的使用場景

    為什么要用內存池 為什么要用內存池?首先,在7 * 24h的服務器中如果不使用內存池,而使用malloc和free,那么就非常容易產生內存
    的頭像 發表于 11-10 17:19 ?756次閱讀
    <b class='flag-5'>內存</b>池的使用場景
    主站蜘蛛池模板: 美国bj69video18 | 欧美性受xxxx| 色婷婷一区二区三区四区成人网 | 可以在线看黄的网站 | 狠狠狠狠狠操 | 色婷婷99综合久久久精品 | 最近在线观看免费完整视频 | 88xx成人永久免费观看 | 四虎成人影院网址 | 在线免费看黄视频 | 亚洲伊人久久大香线蕉综合图片 | 午夜一级免费视频 | 五月天婷婷伊人 | 欧美成人精品一区二三区在线观看 | 看久久 | 久久综合97色综合网 | 国产三片高清在线观看 | 特级毛片女人18毛片 | 欧美一区二区三区不卡免费观看 | 深夜视频在线免费观看 | 夜夜想夜夜爽天天爱天天摸 | 欧美一级特黄aa大片 | 亚洲最大的成人网 | 一本一本大道香蕉久在线精品 | 久久综合爱 | 天天操天天射天天 | 大又大又粗又爽又黄毛片女人 | 国产精品天天干 | 色网站在线看 | 久久香蕉精品视频 | 日本xxxx色视频在线观看 | 他也色在线 | 久久99精品久久久久久久不卡 | 国产成人久视频免费 | 五月婷婷在线观看视频 | 欧美特黄一区二区三区 | 免费国产不卡午夜福在线观看 | 视频一二三区 | 毛片123| 四虎影视永久在线 yin56xyz | 一区二区三区四区国产精品 |