內(nèi)存碎片
在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、碎片化的內(nèi)存。那么內(nèi)存碎片是怎么來的呢?內(nèi)存碎片是伴隨著內(nèi)存申請和釋放而來的,如圖所示。
(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)過很多次的申請和釋放以后,內(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)存塊。
-
嵌入式
+關(guān)注
關(guān)注
5103文章
19268瀏覽量
310026 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3081瀏覽量
74594 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62777
發(fā)布評論請先 登錄
相關(guān)推薦
FreeRTOS內(nèi)存是動(dòng)態(tài)分配嗎?

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

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

請問mymalloc會(huì)產(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)存碎片Linux

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

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

評論