RT-Thread学习记录1 动态内存的使用

只谈情不闲聊 提交于 2020-08-10 06:55:04

先使用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)
从内存堆中分配连续内存地址的多个内存块

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!