博客專欄

        EEPW首頁 > 博客 > 什么是內(nèi)存碎片?

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

        發(fā)布人:美男子玩編程 時(shí)間:2023-10-13 來源:工程師 發(fā)布文章

        在嵌入式系統(tǒng)中,內(nèi)存是十分有限而且是十分珍貴的,用一塊內(nèi)存就少了一塊內(nèi)存,而在分配中隨著內(nèi)存不斷被分配和釋放,整個(gè)系統(tǒng)內(nèi)存區(qū)域會(huì)產(chǎn)生越來越多的碎片。


        因?yàn)樵谑褂眠^程中,申請(qǐng)了一些內(nèi)存,其中一些釋放了,導(dǎo)致內(nèi)存空間中存在一些小的內(nèi)存塊,它們地址不連續(xù),不能夠作為一整塊的大內(nèi)存分配出去,所以一定會(huì)在某個(gè)時(shí)間,系統(tǒng)已經(jīng)無法分配到合適的內(nèi)存了,導(dǎo)致系統(tǒng)癱瘓。


        系統(tǒng)中實(shí)際是還有內(nèi)存的,但是因?yàn)樾K的內(nèi)存的地址不連續(xù),導(dǎo)致無法分配成功。


        內(nèi)存碎片產(chǎn)生過程,如下圖所示:


        圖片


        過程說明如下:

        (1)、此時(shí)內(nèi)存堆還沒有經(jīng)過任何操作,為全新的。

        (2)、此時(shí)經(jīng)過第一次內(nèi)存分配,一共分出去了 4 塊內(nèi)存塊,大小分別為 80B、80B、10B 和100B。 

        (3)、有些應(yīng)用使用完內(nèi)存,進(jìn)行了釋放,從左往右第一個(gè) 80B 和后面的 10B 這兩個(gè)內(nèi)存塊就是釋放的內(nèi)存。如果此時(shí)有個(gè)應(yīng)用需要 50B 的內(nèi)存,那么它可以從兩個(gè)地方來獲取到,一個(gè)是最前面的還沒被分配過的剩余內(nèi)存塊,另一個(gè)就是剛剛釋放出來的 80B 的內(nèi)存塊。但是很明顯,剛剛釋放出來的這個(gè) 10B 的內(nèi)存塊就沒法用了,除非此時(shí)有另外一個(gè)應(yīng)用所需要的內(nèi)存小于 10B。 

        (4)、經(jīng)過很多次的申請(qǐng)和釋放以后,內(nèi)存塊被不斷分割、最終導(dǎo)致大量很小的內(nèi)存塊。也就是圖中 80B 和 50B 這兩個(gè)內(nèi)存塊之間的小內(nèi)存塊,這些內(nèi)存塊由于太小導(dǎo)致大多數(shù)應(yīng)用無法使用,這些沒法使用的內(nèi)存塊就淪為了內(nèi)存碎片。


        內(nèi)存碎片是內(nèi)存管理算法重點(diǎn)解決的一個(gè)問題,否則的話會(huì)導(dǎo)致實(shí)際可用的內(nèi)存越來越少,最終應(yīng)用程序因?yàn)榉峙洳坏胶线m的內(nèi)存而崩潰,所以我們需要一個(gè)優(yōu)良的內(nèi)存分配算法來避免這種情況的出現(xiàn)。 


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: 內(nèi)存碎片

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 项城市| 通道| 临清市| 山东省| 应城市| 扬州市| 和硕县| 保靖县| 镇坪县| 黎川县| 古丈县| 化隆| 礼泉县| 开远市| 香港| 东光县| 临安市| 嘉荫县| 绥中县| 南开区| 伊吾县| 会同县| 黄山市| 龙井市| 社会| 龙门县| 辽阳县| 靖远县| 凤山县| 珲春市| 威信县| 漳州市| 博乐市| 中阳县| 遂宁市| 手游| 泰兴市| 文登市| 上思县| 阆中市| 普格县|