RT-Thread入门笔记2-动态内存堆的使用

发布时间:2024年01月11日

栈(stack): 由编译器自动分配释放
堆(heap) : 一般由程序员分配和释放

rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#define HEAP_BEGIN  ((void *)&Image??RW_IRAM1??ZI??Limit) //ZI段的结束地址,执行地址,也就是程序执行区的RAM结束后的地址,反过来也就是我们执行区的RAM未使用的区域的起始地址
#define HEAP_END    STM32_SRAM_END

PS:一个ARM程序包含3部分:RO,RW和ZI
RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的未初始化的变量

  • void *rt_malloc(rt_size_t nbytes):rt_malloc函数会从系统堆空间中找到合适大小的内存块.
  • void rt_free(void *ptr):为用户将malloc、realloc、calloc申请的内存释放,每次申请内存用完后必须进行释放,否则会造成内存泄漏.
  • void *rt_realloc(void *rmem, rt_size_t newsize):在已分配内存块的基础上重新分配内存块的大小(增加或缩小),在进行重新分配内存块时,原来的内存块数据保持不变(缩小的情况下, 后面的数据被自动截断).
  • void *rt_calloc(rt_size_t count, rt_size_t size):从内存堆中分配连续内存地址的多个内存块.
文章来源:https://blog.csdn.net/qq_42170079/article/details/135513346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。