用 C 语言实现单片机中的动态内存管理

本文介绍了如何在单片机环境下使用C语言实现动态内存管理,通过位图的完全二叉树结构管理内存分配和释放。详细阐述了内存分配过程,并给出了1KB和14KB内存管理的例子。提供了内存管理的头文件KYMemory.h,但源码文件KYMemory.c由于版权原因进行了混淆处理。
摘要由CSDN通过智能技术生成

================================================================================
标题: 用 C 语言实现单片机中的动态内存管理
作者: 叶飞虎
日期: 2018.12.16
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    在单片机中内存空间很小,主要是为了省硬件成本,如: Cortex m3/m4 的 64KB/192KB, Quectel M26 的 256KB/512KB 等等都不带动态内存管理。为了实现内存动态分配和释放,要么使用厂家库的动态内存管理接口,要么自己写动态内存管理。

    在不同单片机中有些只有片内存储单元,而有些可支持多个片外RAM,而且片外尺寸要大很多,有 1MB/2MB 等等。需要把片内和片外内存都管理起来,且要支持不定尺寸的内存分配和释放,所以自己就设计开发了内存管理,为了与 C 中的 malloc 和 free 一样好用就把分配和释放内存函数定义如下:

// 分配指定尺寸的内存,若返回值非 NULL 则为分配成功的内存地址,否则分配失败
void* Malloc(int ASize);

// 释放已分配的内存
void  Free(void* AMemory);

    本内存管理算法采用 bit 位的完全二叉树来管理分配和释放,而内存管理所需要的另外内存开销为每 1KB 需要 16 字节,且内存分配的最小单元为 16 字节,即使分配 1 字节也占用 16 字节空间。其实最小单元字节数可以根据自己需要来调整,最小单元字节数越大则内存管理的额外开销就越小,如果最小单元字节数为 32 时 1KB 的开销只要 8 字节。若分配尺寸在最小单元字节数之内(含)时,只需要 1bit 来做标志;否则就需要 2bits 来做标志,在二叉树的分支结点和叶结点各一个

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值