FreeRTOS Heap 1_2_3_4_5 比較


TOC

heap_1

  • 在調度程序運行前,提前動態分配一大段內存空間,不管任務用與不用,用多少,內存占用是固定的
  • 商業,安全領域,禁止動態分配內存
    • basic version api: pvPortMalloc(),沒有vPortFree()!
    • configTOTAL_HEAP_SIZE in FreeRTOSConfig.h

每創建一個任務,都需要一個task control block (TCB)

heap_2

  • heap_2 是為了向后兼容才保留的,建議新的設計中使用heap_4代替。
  • heap_2 允許釋放內存
  • heap_2 與 heap_1一樣需要分割 configTOTAL_HEAP_SIZE 所靜態分配的內存
  • 最合適內存分配算法,比如要分配20bytes, 現在有5,25,50等內存區域,heap_2就會將25分配出20bytes。
  • 但heap_2 不能整合相鄰的空閑內存區域, heap_4可以。
  • heap_2 適合於,重復性申請和釋放內存的操作,並且每次內存大小都一樣。

heap_3

  • heap_3 使用標准庫 malloc()free() 函數, configTOTAL_HEAP_SIZE將不起作用。 heap 大小決定於linker配置

heap_4

  • heap_4 與heap_1、heap_2 一樣是從內存數組分配出小的內存塊
  • 內存數組大小決定於configTOTAL_HEAP_SIZE,這就造成一種現象:雖然沒有任何內存被分配,但程序已經消耗了很多的內存。
  • heap_4 采用 內存適配算法 和 相鄰內存整合算法(減少了內存碎片化的風險)

heap_5

  • heap_5 分配和釋放內存的算法 和 heap_4 一樣。
  • heap_5 不局限於從靜態內存數組中分配內存,它可以從 多個、不連續的內存空間中分配內存。
  • 當使用heap_5時,vPortDefineHeapRegions()必須在 pvPofrtMalloc、內核對象之前調用。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM