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