malloc free 分析

本文档记录malloc()、 free()函数分析,

代码来自 https://github.com/apache/mynewt-core/tree/master/libc/baselibc

 

一、堆栈描述

  在嵌入式ram分配中有两个非常重要的概念 - 堆和栈      

       栈 - 主要用于函数调用时保存 函数入口地址、参数及返回数据 空间,

       堆 - 一般用于对RAM动态需求,典型的就是使用malloc来分配一段空间,使用完后用free释放

       

  下图是STM32F429单片机在启动代码中便分配堆和栈的大小

 

 

 二、代码分析

   在堆使用前先建立3个指针管理记录当前堆的使用,右图当前分析堆空间

    *sbrkBase - 堆首地址

    *sbrkLimit - 堆的结束地址

    *brk - 指向当前堆可使用地址

                  

  程序在使用malloc 和 free前须先调用 void _sbrkInit(char *base, char *limit) 

 

 三、测试流程

 

 四、malloc.c 

 

分配两组空间后

 

posted @ 2020-10-19 18:09  不在+年华  阅读(129)  评论(0编辑  收藏  举报