RT Thread 動態記憶體堆

2021-10-22 09:22:48 字數 934 閱讀 5311

棧(stack):由編譯器自動分配釋放(區域性變數)

堆(heap):一般由程式設計師分配和釋放(rt_malloc)

1、動態分配記憶體的api(board.c中板機硬體效能初始化,根據板卡實際記憶體進行分配)

rt_system_heap_init((void *)heap_begin,(void *)heap_end);

void *rt_realloc(void *rmem, rt_size_t newsize);在已分配記憶體塊的基礎上重新分配記憶體塊的大小(增加或縮小)

如何在重新分配?原來的記憶體塊資料保持不變(縮小的情況下,後面的資料被自動截斷)

void *rt_calloc(rt_size_t count,rt_size_t size);從記憶體堆中分配連續記憶體位址的多個記憶體塊(生成count*size位元組的空間)

2、 rt_malloc() 分配的空間需要小於系統現在所剩的空閒記憶體空間,否則返回值為rt_null,即分配失敗。

3、使用注意點:

①記憶體復位:每次申請到新的記憶體塊後,建議對申請到的記憶體塊進行清零操作。

例:p = rt_malloc(10); if(p != rt_mull)

②記憶體洩漏:指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。

解決方法:rt_malloc()與rt_free()配套使用。(及時釋放)

02 RT Thread動態記憶體堆的使用

在微控制器應用中,我們經常提到堆疊這個詞,實際上,堆和棧是兩個不同的概念 棧 stack 由編譯器自動分配釋放 堆 heap 一般由程式設計師分配和釋放。int a 0 全域性初始化 char p1 全域性未初始化區 int main void mdk裸機系統動態記憶體配置和使用 rt thread...

指標 堆記憶體分配(動態記憶體)

一 對於普通陣列來說,在定義或初始化時必須確定元素個數,即下標必須是已知的,即在編譯時已知。例 定義陣列時 int a 6 初始化陣列時,float a 對陣列a來說,雖然沒有下標,但是通過 中的元素個數,可以查出其下標為4。像這樣的格式 int a 錯誤,下標未知 int a n 錯誤,同上 in...

C中動態記憶體管理 堆中分配記憶體

堆區 標頭檔案 include1 malloc 函式會向堆中申請一片連續的可用記憶體空間 2 若申請成功 返回指向這片記憶體空間的指標 若失敗 則會返回null,所以我們在用malloc 函式開闢動態記憶體之後,一定要判斷函式返回值是否為null.3 返回值的型別為void 型,malloc 函式並...