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

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

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

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

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-30 10:29 ? 次閱讀

內(nèi)存碎片

在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、碎片化的內(nèi)存。那么內(nèi)存碎片是怎么來的呢??jī)?nèi)存碎片是伴隨著內(nèi)存申請(qǐng)和釋放而來的,如圖所示。

圖片

(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)存而奔潰!FreeRTOS 的
heap_4.c 就給我們提供了一個(gè)解決內(nèi)存碎片的方法,那就是將內(nèi)存碎片進(jìn)行合并組成一個(gè)新的可用的大內(nèi)存塊。

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

    關(guān)注

    5088

    文章

    19158

    瀏覽量

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

    關(guān)注

    8

    文章

    3042

    瀏覽量

    74179
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62277
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FreeRTOS內(nèi)存是動(dòng)態(tài)分配嗎?

    你可能會(huì)好奇:FreeRTOS可以創(chuàng)建任務(wù),也可以刪除任務(wù),它是動(dòng)態(tài)分配的內(nèi)存嗎?
    的頭像 發(fā)表于 03-24 09:55 ?2234次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>是動(dòng)態(tài)分配嗎?

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

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

    FreeRTOS內(nèi)存機(jī)制詳解

    FreeRTOS是一種實(shí)時(shí)操作系統(tǒng),它提供了多種內(nèi)存分配方式,包括動(dòng)態(tài)內(nèi)存分配和靜態(tài)內(nèi)存分配。
    的頭像 發(fā)表于 12-31 16:49 ?2790次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>機(jī)制詳解

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

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

    FreeRTOS內(nèi)存管理的算法解析?

    關(guān)于FreeRTOS內(nèi)存管理,有人測(cè)試過它給定的算法么?會(huì)不會(huì)有內(nèi)存碎片的出現(xiàn),如果產(chǎn)品一直運(yùn)行,會(huì)不會(huì)出現(xiàn)內(nèi)存崩潰的情況。求證啊。目前用h
    發(fā)表于 07-30 11:39

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

    考試題型:?jiǎn)芜x 8 道,不定項(xiàng) 2 道,編程 2 道,問答 1 道考點(diǎn):進(jìn)程間通訊的方式,linux的基本指令(考了grep,chmod),根據(jù)代碼給出運(yùn)行的結(jié)果問答題:簡(jiǎn)述內(nèi)存碎片的定義,如何避免
    發(fā)表于 12-21 07:50

    Freertos關(guān)于堆內(nèi)存管理的相關(guān)資料分享

    內(nèi)存管理Malloc、Free防止內(nèi)存碎片Freertos
    發(fā)表于 12-27 08:12

    FreeRTOS代碼剖析之1:內(nèi)存管理Heap

    內(nèi)存管理是一個(gè)操作系統(tǒng)的重要組成部分之一,所有應(yīng)用程序都離不開操作系統(tǒng)的內(nèi)存管理。因此,在剖析FreeRTOS的內(nèi)核代碼之前,前對(duì)FreeRTOS
    發(fā)表于 02-09 05:25 ?965次閱讀
    <b class='flag-5'>FreeRTOS</b>代碼剖析之1:<b class='flag-5'>內(nèi)存</b>管理Heap

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

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

    關(guān)于FreeRTOS內(nèi)存分配多少才合適

    FreeRTOS內(nèi)存分配多少才合適
    的頭像 發(fā)表于 03-06 15:04 ?1.9w次閱讀

    FreeRTOS高級(jí)篇7---FreeRTOS內(nèi)存管理分析

    FreeRTOS操作系統(tǒng)將內(nèi)核與內(nèi)存管理分開實(shí)現(xiàn),操作系統(tǒng)內(nèi)核僅規(guī)定了必要的內(nèi)存管理函數(shù)原型,而不關(guān)心這些內(nèi)存管理函數(shù)是如何實(shí)現(xiàn)的。這...
    發(fā)表于 01-26 17:36 ?8次下載
    <b class='flag-5'>FreeRTOS</b>高級(jí)篇7---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>管理分析

    FreeRTOS系列第8篇---FreeRTOS內(nèi)存管理

    本文介紹內(nèi)存管理的基礎(chǔ)知識(shí),詳細(xì)源碼分析見《 FreeRTOS高級(jí)篇7---FreeRTOS內(nèi)存管理分析》
    發(fā)表于 01-26 17:56 ?17次下載
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>管理

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

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

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

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

    FreeRTOS內(nèi)存管理實(shí)現(xiàn)

    FreeRTOS是一個(gè)為嵌入式系統(tǒng)設(shè)計(jì)的開源實(shí)時(shí)操作系統(tǒng)。它提供了一個(gè)多任務(wù)內(nèi)核和一系列功能,適合在資源受限的設(shè)備上管理實(shí)時(shí)任務(wù)和應(yīng)用程序。FreeRTOS內(nèi)存管理的關(guān)鍵方面之一是堆管理。
    的頭像 發(fā)表于 10-10 16:17 ?896次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>管理實(shí)現(xiàn)