heap_2 內(nèi)存分配方法
heap_2 提供了一個更好的分配算法,不像 heap_1那樣,heap_2 提供了內(nèi)存釋放函數(shù)。heap_2 不會把釋放的內(nèi)存塊合并成一個大塊,這樣有一個缺點,隨著你不斷的申請內(nèi)存,內(nèi)存堆就會被分為很多個大小不一的內(nèi)存(塊),也就是會導致內(nèi)存碎片!
heap_2 的特性如下:
1、可以使用在那些可能會重復的刪除任務、隊列、信號量等的應用中,要注意有內(nèi)存碎片產(chǎn)生!
2、如果分配和釋放的內(nèi)存 n 大小是隨機的,那么就要慎重使用了,比如下面的示例:
● 如果一個應用動態(tài)的創(chuàng)建和刪除任務,而且任務需要分配的堆棧大小都是一樣的,那么 heap_2 就非常合適。如果任務所需的堆棧大小每次都是不同,那么 heap_2 就不適合了,因為這樣會導致內(nèi)存碎片產(chǎn)生,最終導致任務分配不到合適的堆棧!
● 如果一個應用中所使用的隊列存儲區(qū)域每次都不同,那么 heap_2 就不適合了,和上面一樣。
● 應用需要調(diào)用 pvPortMalloc()和 vPortFree()來申請和釋放內(nèi)存,而不是通過其他 FreeRTOS 的其他 API 函數(shù)來間接的調(diào)用,這種情況下 heap_2 不適合。
3、如果應用中的任務、隊列、信號量和互斥信號量具有不可預料性(如所需的內(nèi)存大小不能確定,每次所需的內(nèi)存都不相同,或者說大多數(shù)情況下所需的內(nèi)存都是不同的)的話可能會導致內(nèi)存碎片。
4、具有不可確定性,但是也遠比標準 C 中的 mallo()和 free()效率高!heap_2 基本上可以適用于大多數(shù)的需要動態(tài)分配內(nèi)存的工程中,而 heap_4 更是具有將內(nèi)存碎片合并成一個大的空閑內(nèi)存塊(就是內(nèi)存碎片回收)的功能。
-
嵌入式
+關注
關注
5090文章
19176瀏覽量
306917 -
內(nèi)存
+關注
關注
8文章
3052瀏覽量
74222 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62329
發(fā)布評論請先 登錄
相關推薦
評論