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

你知道linux kernel內存碎片防治技術?
FreeRTOS高級篇7---FreeRTOS內存管理分析

FreeRTOS系列第8篇---FreeRTOS內存管理

FreeRTOS內存管理實現

評論