我正在研究 FreeRTOS,在他們的教程書中,他們談到了使用“預分配緩沖區池”來保存指向char[]陣列的指標(通過佇列在任務之間傳遞)。
在第 4.5 章處理大資料或可變大小資料的示例中,他們參考了這個sudo函式prvGetBuffer()并宣告“prvGetBuffer() 的實作未顯示——它可能從預分配的緩沖區池中獲取緩沖區,或者只是動態分配緩沖區。”。這似乎是我想看看的一個功能,但在他們的檔案/示例中找不到它。
究竟什么是“預分配緩沖區池”,實作是什么樣的C/C ?我在互聯網上找不到太多關于此的資訊。
我想假設它可能是一個在運行時之前“靜態”分配的二維陣列。也許它被宣布為類似char strBuffer[5][50];或其他東西 - idk。
uj5u.com熱心網友回復:
究竟什么是“預先分配的緩沖區池”,
記憶體緩沖區是可以創建物件的記憶體區域。分配是獲取資源的行為,在這種情況下,資源是記憶體緩沖區。
“Pre”前綴意味著分配將在prvGetBuffer呼叫之前發生。“池”是對事物集合的抽象描述,例如資料結構。
uj5u.com熱心網友回復:
池是共享專案的集合,例如秘書池或motorpool。
預分配緩沖區池是記憶體塊池。通常,池中的所有塊都具有相同的大小。應用程式可以從池中分配一個塊,根據需要使用記憶體,然后在不再需要時將該塊回傳到池中。“預分配”意味著在程式的生命周期內不會從堆中重復動態分配塊。通常,塊在初始化期間被靜態分配并分配給池。
記憶體池通常實作為FIFO 佇列,通常使用鏈表資料結構。來自池的分配是從佇列的開頭獲取下一個塊。將塊回傳到池中是將塊添加到佇列的末尾。
使用預分配緩沖區池是避免動態記憶體分配的好方法,這在嵌入式系統中是不可取的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421209.html
標籤:
