RT-Thread學習記錄1 動態內存的使用

先使用Keil軟件仿真運行程序學習,RT-Thread Simulator 例程例程結合B站視頻一起學習。程序包括多個例程。

以下爲看視頻的筆記。。。。

棧(stack):有編譯器自動分配釋放

堆(heap):一般有程序員分配釋放

int a = 0; //全局初始化區
char *p1;  //全局未初始化區
mian()
{
    int b; //棧
    char s[] = "abc123"; //棧
    char *p2; //棧
    char *p3 = "123654";  //123654在常量區,p3在棧上
    static int c = 0; //全局(靜態)初始化區
    p1 = (char *)malloc(10); //堆
    p2 = (char *)malloc(15); //堆  

}
void rt_system_heap_init(void *begin_addr, void *end_addr)//系統分配堆的大小函數API
{
    .......
}

點擊工程文件可以打開map文件查看系統RAM,ROM使用大小。

char *p;
int num = 10;
p = (char *)rt_malloc(num);
 /* 如果分配成功 */
if (ptr != RT_NULL)
    {
        rt_memset(p,0,num);

    }

//.......處理內容....


rt_free(p);

//通過以上API分配動態內存配置和使用
//總的 RW + heap size = MCU 使用RAM的大小

內存復位:當我們每次申請到新的內存塊之後,建議對所申請的內存塊進行清零操作。

內存泄漏:我們在使用動態內存時要注意,rt_malloc()需要和rt_free()配套使用。

void * rt_realloc(void *rmem,rt_size_t newsize)
在內存分配塊的基礎上重新分配內存塊的大小(增加或縮減)

在進行重新分配內存塊時,原來的內存塊數據保持不變(縮小的情況下,後面的數據被自動截斷)

void * rt_calloc(rt_size_t count,rt_size_t size)
從內存堆中分配連續內存地址的多個內存塊

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章