內(nèi)存碎片
在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、碎片化的內(nèi)存。那么內(nèi)存碎片是怎么來的呢?內(nèi)存碎片是伴隨著內(nèi)存申請和釋放而來的,如圖所示。
(1)、此時內(nèi)存堆還沒有經(jīng)過任何操作,為全新的。
(2)、此時經(jīng)過第一次內(nèi)存分配,一共分出去了 4 塊內(nèi)存塊,大小分別為 80B、80B、10B 和100B。
(3)、有些應(yīng)用使用完內(nèi)存,進(jìn)行了釋放,從左往右第一個 80B 和后面的 10B 這兩個內(nèi)存塊就是釋放的內(nèi)存。如果此時有個應(yīng)用需要 50B的內(nèi)存,那么它可以從兩個地方來獲取到,一個是最前面的還沒被分配過的剩余內(nèi)存塊,另一個就是剛剛釋放出來的 80B 的內(nèi)存塊。但是很明顯,剛剛釋放出來的這個 10B
的內(nèi)存塊就沒法用了,除非此時有另外一個應(yīng)用所需要的內(nèi)存小于10B。
(4)、經(jīng)過很多次的申請和釋放以后,內(nèi)存塊被不斷的分割、最終導(dǎo)致大量很小的內(nèi)存塊!也就是圖中 80B 和 50B這兩個內(nèi)存塊之間的小內(nèi)存塊,這些內(nèi)存塊由于太小導(dǎo)致大多數(shù)應(yīng)用無法使用,這些沒法使用的內(nèi)存塊就淪為了內(nèi)存碎片!
內(nèi)存碎片是內(nèi)存管理算法重點解決的一個問題,否則的話會導(dǎo)致實際可用的內(nèi)存越來越少,最終應(yīng)用程序因為分配不到合適的內(nèi)存而奔潰!FreeRTOS 的
heap_4.c 就給我們提供了一個解決內(nèi)存碎片的方法,那就是將內(nèi)存碎片進(jìn)行合并組成一個新的可用的大內(nèi)存塊。
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317647 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3125瀏覽量
75274 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
493瀏覽量
64365
發(fā)布評論請先 登錄
C語言malloc申請內(nèi)存時的碎片問題

請問mymalloc會產(chǎn)生內(nèi)存碎片嗎?
FreeRTOS內(nèi)存管理的算法解析?
如何避免內(nèi)存碎片的產(chǎn)生
Freertos關(guān)于堆內(nèi)存管理的相關(guān)資料分享
FreeRTOS代碼剖析之1:內(nèi)存管理Heap

你知道linux kernel內(nèi)存碎片防治技術(shù)?
FreeRTOS高級篇7---FreeRTOS內(nèi)存管理分析

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

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

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

評論