一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

內(nèi)存分段是如何產(chǎn)生內(nèi)存碎片的

麥辣雞腿堡 ? 來(lái)源:程序猿阿星 ? 作者:程序猿阿星 ? 2023-10-09 16:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

內(nèi)存分段

程序包含若干個(gè)邏輯分段,如可由代碼段、數(shù)據(jù)段、棧段、堆段組成,每個(gè)分段都有不同的屬性,所以?xún)?nèi)存以分段的形式把這些段分離出來(lái)進(jìn)行管理

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

分段管理下的虛擬地址由兩部分組成,段號(hào)和段內(nèi)偏移量

圖片

通過(guò)段號(hào)映射段表的項(xiàng)

從項(xiàng)中獲取到段基地址

段基地址+段內(nèi)偏移量=使用的物理內(nèi)存

通過(guò)上述知道了,使用段號(hào)去映射段表的項(xiàng),使用項(xiàng)中的段基地址與偏移量計(jì)算出物理內(nèi)存地址,但實(shí)際上,分段方式會(huì)把程序的虛擬地址分為4段,每個(gè)段在段表中有一個(gè)項(xiàng),在這一項(xiàng)找到段的基地址,再加上偏移量計(jì)算出物理內(nèi)存地址

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

內(nèi)存碎片的問(wèn)題

內(nèi)存交換的效率低的問(wèn)題

接下來(lái)對(duì)這兩個(gè)問(wèn)題進(jìn)行分析

分段方式是如何產(chǎn)生內(nèi)存碎片的?

在說(shuō)內(nèi)存碎片之前,還是先弄明白,什么是內(nèi)存碎片?,8個(gè)人去外面吃飯,因?yàn)轱堻c(diǎn)原因,人比較多,剩下的都是4人小餐桌,這些4人小餐桌就是我們所說(shuō)的內(nèi)存碎片,此時(shí)會(huì)有小伙伴說(shuō),把2個(gè)4人小餐桌拼湊在一起就解決了這個(gè)問(wèn)題,非常簡(jiǎn)單,我們把這種方式稱(chēng)為內(nèi)存碎片整理(涉及到內(nèi)存交換)。

回到正題,我們來(lái)看一例子,假設(shè)物理內(nèi)存只有1GB (1024MB),用戶(hù)電腦上運(yùn)行了多個(gè)程序:

瀏覽器占用128MB

音樂(lè)軟件占用256MB

游戲占用了512MB

這個(gè)時(shí)候我們關(guān)閉瀏覽器,剩余物理內(nèi)存1024MB -(256MB+512MB)=256MB。但是這剩余的256MB物理內(nèi)存不是連續(xù)的,被分為了兩段128MB,導(dǎo)致沒(méi)有空間再打開(kāi)一個(gè)200MB的程序,如下圖所示

圖片

這里的內(nèi)存碎片問(wèn)題共有兩點(diǎn):

外部?jī)?nèi)存碎片,就是多個(gè)不連續(xù)的小物理內(nèi)存空間,導(dǎo)致新的程序無(wú)法被裝載

內(nèi)部?jī)?nèi)存碎片,程序所有的內(nèi)存都被裝載進(jìn)了物理內(nèi)存,但是程序有部分的內(nèi)存,可能不經(jīng)常使用,造成內(nèi)存的浪費(fèi)

解決外部?jī)?nèi)存碎片的方法就是使用內(nèi)存碎片整理

內(nèi)存碎片整理通過(guò)內(nèi)存交換的方式來(lái)實(shí)現(xiàn),我們可以把音樂(lè)軟件占用的256MB加載到硬盤(pán)上面去,再?gòu)挠脖P(pán)讀取回來(lái),但是讀取回來(lái)的位置不再是原來(lái)的位置,而是緊跟已經(jīng)占用的游戲512MB后面,這樣兩個(gè)128MB的空閑物理內(nèi)存就合并成了一個(gè)256MB的連續(xù)物理內(nèi)存,于是新的200MB新程序就能被裝載進(jìn)來(lái)

內(nèi)存交換空間,在 Linux 系統(tǒng)里,是我們??吹降?Swap 空間,這塊空間是從硬盤(pán)劃分出來(lái)的,用于內(nèi)存與硬盤(pán)的空間交換。

分段方式為什么內(nèi)存交換效率低?首先分段管理容易造成內(nèi)存碎片,導(dǎo)致內(nèi)存交換的頻率較高,因?yàn)橛脖P(pán)的訪問(wèn)速度比內(nèi)存慢太多了,然后每次交換的時(shí)候,把一大段連續(xù)的內(nèi)存寫(xiě)入到硬盤(pán),再又從硬盤(pán)讀取出來(lái),如果交換的是一個(gè)占內(nèi)存空間很大的程序,這樣整個(gè)機(jī)器都會(huì)顯得卡頓,過(guò)程也很慢的,所以說(shuō)分段方式內(nèi)存交換效率低。

為了解決內(nèi)存分段管理造成的內(nèi)存碎片與內(nèi)存交換效率低的問(wèn)題,就出現(xiàn)了內(nèi)存分頁(yè)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 硬盤(pán)
    +關(guān)注

    關(guān)注

    3

    文章

    1338

    瀏覽量

    58438
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3122

    瀏覽量

    75245
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7143

    瀏覽量

    125555
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82959
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    linux內(nèi)存相關(guān)知識(shí)科普

    linux 內(nèi)存組織結(jié)構(gòu)和頁(yè)面布局,內(nèi)存碎片產(chǎn)生原因和優(yōu)化算法。
    發(fā)表于 08-08 10:57 ?490次閱讀

    走進(jìn)Linux內(nèi)存系統(tǒng)探尋內(nèi)存管理的機(jī)制和奧秘

    Linux 內(nèi)存是后臺(tái)開(kāi)發(fā)人員,需要深入了解的計(jì)算機(jī)資源。合理的使用內(nèi)存,有助于提升機(jī)器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)和頁(yè)面布局,內(nèi)存
    的頭像 發(fā)表于 01-05 09:47 ?1952次閱讀

    C語(yǔ)言malloc申請(qǐng)內(nèi)存時(shí)的碎片問(wèn)題

    解決問(wèn)題:malloc在申請(qǐng)內(nèi)存的時(shí)候,內(nèi)存碎片問(wèn)題會(huì)導(dǎo)致原本內(nèi)存大小足夠,卻申請(qǐng)大內(nèi)存失敗。
    發(fā)表于 08-06 16:58 ?1983次閱讀
    C語(yǔ)言malloc申請(qǐng)<b class='flag-5'>內(nèi)存</b>時(shí)的<b class='flag-5'>碎片</b>問(wèn)題

    嵌入式系統(tǒng)中內(nèi)存碎片產(chǎn)生過(guò)程說(shuō)明

    在嵌入式系統(tǒng)中,內(nèi)存是十分有限而且是十分珍貴的,用一塊內(nèi)存就少了一塊內(nèi)存,而在分配中隨著內(nèi)存不斷被分配和釋放,整個(gè)系統(tǒng)內(nèi)存區(qū)域會(huì)
    發(fā)表于 09-21 12:22 ?958次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b><b class='flag-5'>產(chǎn)生</b>過(guò)程說(shuō)明

    Linux內(nèi)核內(nèi)存規(guī)整總結(jié)

    1.前言 伙伴系統(tǒng)作為內(nèi)核最基礎(chǔ)的物理頁(yè)內(nèi)存分配器,具有高效、實(shí)現(xiàn)邏輯簡(jiǎn)介等優(yōu)點(diǎn),其原理頁(yè)也盡可能降低內(nèi)存外部碎片產(chǎn)生,但依然無(wú)法杜絕碎片問(wèn)
    的頭像 發(fā)表于 11-11 11:17 ?1707次閱讀
    Linux內(nèi)核<b class='flag-5'>內(nèi)存</b>規(guī)整總結(jié)

    請(qǐng)問(wèn)mymalloc會(huì)產(chǎn)生內(nèi)存碎片嗎?

    malloc申請(qǐng)內(nèi)存在釋放后,會(huì)產(chǎn)生內(nèi)存碎片,所以UCOSIII內(nèi)有專(zhuān)門(mén)的內(nèi)存申請(qǐng)。原子哥視頻(UCOSIII視頻19講)最后的時(shí)候說(shuō)可以用
    發(fā)表于 10-16 04:35

    如何避免內(nèi)存碎片產(chǎn)生

    內(nèi)存碎片產(chǎn)生(從內(nèi)部碎片和外部碎片方面講述)編程題:第一題:解析頭文件,簡(jiǎn)單來(lái)說(shuō)就是大寫(xiě)字母小寫(xiě)之母通過(guò)一些特定的規(guī)則進(jìn)行轉(zhuǎn)換,具體題目要
    發(fā)表于 12-21 07:50

    基于線段樹(shù)的內(nèi)存管理方法

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

    如何避免Linux的物理內(nèi)存碎片

    Linux buddyy系統(tǒng)是linux kernel比較穩(wěn)定的一個(gè)模塊,但是并不是說(shuō)它沒(méi)有缺陷,Linux內(nèi)存管理系統(tǒng)自誕生之日,就一直存在物理內(nèi)存碎片化的問(wèn)題:在系統(tǒng)啟動(dòng)并且運(yùn)行很長(zhǎng)一段時(shí)間后
    的頭像 發(fā)表于 05-01 16:43 ?5720次閱讀
    如何避免Linux的物理<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>化

    你知道linux kernel內(nèi)存碎片防治技術(shù)?

    Linux kernel組織管理物理內(nèi)存的方式是buddy system(伙伴系統(tǒng)),而物理內(nèi)存碎片正式buddy system的弱點(diǎn)之一,為了預(yù)防以及解決碎片問(wèn)題,kernel采取了
    發(fā)表于 05-10 10:59 ?1095次閱讀

    OPPO內(nèi)存碎片化引擎的作業(yè)

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

    FreeRTOS內(nèi)存碎片是怎么來(lái)的

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

    什么是內(nèi)存碎片Linux

    什么是內(nèi)存碎片? 內(nèi)存碎片在Linux很早的時(shí)候就已經(jīng)出現(xiàn)了,了解早期內(nèi)存碎片
    的頭像 發(fā)表于 10-08 10:12 ?967次閱讀
    什么是<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>Linux

    如何解決內(nèi)存碎片內(nèi)存交換效率慢的問(wèn)題

    內(nèi)存分頁(yè) 分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會(huì)出現(xiàn)大量內(nèi)存碎片
    的頭像 發(fā)表于 10-09 16:57 ?1339次閱讀
    如何解決<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>與<b class='flag-5'>內(nèi)存</b>交換效率慢的問(wèn)題

    內(nèi)存池的使用場(chǎng)景

    為什么要用內(nèi)存池 為什么要用內(nèi)存池?首先,在7 * 24h的服務(wù)器中如果不使用內(nèi)存池,而使用malloc和free,那么就非常容易產(chǎn)生內(nèi)存
    的頭像 發(fā)表于 11-10 17:19 ?978次閱讀
    <b class='flag-5'>內(nèi)存</b>池的使用場(chǎng)景