內(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)推薦
你可能會(huì)好奇:FreeRTOS可以創(chuàng)建任務(wù),也可以刪除任務(wù),它是動(dòng)態(tài)分配的內(nèi)存嗎?
發(fā)表于 03-24 09:55
?2234次閱讀
解決問題:malloc在申請(qǐng)內(nèi)存的時(shí)候,內(nèi)存碎片問題會(huì)導(dǎo)致原本內(nèi)存大小足夠,卻申請(qǐng)大內(nèi)存失敗。
發(fā)表于 08-06 16:58
?1665次閱讀
FreeRTOS是一種實(shí)時(shí)操作系統(tǒng),它提供了多種內(nèi)存分配方式,包括動(dòng)態(tài)內(nèi)存分配和靜態(tài)內(nèi)存分配。
發(fā)表于 12-31 16:49
?2790次閱讀
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
關(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
考試題型:?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
堆內(nèi)存管理Malloc、Free防止內(nèi)存碎片Freertos
發(fā)表于 12-27 08:12
內(nèi)存管理是一個(gè)操作系統(tǒng)的重要組成部分之一,所有應(yīng)用程序都離不開操作系統(tǒng)的內(nèi)存管理。因此,在剖析FreeRTOS的內(nèi)核代碼之前,前對(duì)FreeRTOS的
發(fā)表于 02-09 05:25
?965次閱讀
Linux kernel組織管理物理內(nèi)存的方式是buddy system(伙伴系統(tǒng)),而物理內(nèi)存碎片正式buddy system的弱點(diǎn)之一,為了預(yù)防以及解決碎片問題,kernel采取了
發(fā)表于 05-10 10:59
?962次閱讀
FreeRTOS內(nèi)存分配多少才合適
發(fā)表于 03-06 15:04
?1.9w次閱讀
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次下載
本文介紹內(nèi)存管理的基礎(chǔ)知識(shí),詳細(xì)源碼分析見《 FreeRTOS高級(jí)篇7---FreeRTOS內(nèi)存管理分析》
發(fā)表于 01-26 17:56
?17次下載
什么是內(nèi)存碎片? 內(nèi)存碎片在Linux很早的時(shí)候就已經(jīng)出現(xiàn)了,了解早期內(nèi)存碎片產(chǎn)生的歷史,有利于
發(fā)表于 10-08 10:12
?740次閱讀
內(nèi)存分頁 分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會(huì)出現(xiàn)大量內(nèi)存碎片與內(nèi)存交換效率低的問題 先思考一下怎么解決這兩個(gè)問題,
發(fā)表于 10-09 16:57
?1071次閱讀
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次閱讀
評(píng)論